This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
perldiag: rewording
[perl5.git] / pod / perlfaq7.pod
CommitLineData
68dc0745 1=head1 NAME
2
109f0441 3perlfaq7 - General Perl Language Issues
68dc0745 4
5=head1 DESCRIPTION
6
7This section deals with general Perl language issues that don't
8clearly fit into any of the other sections.
9
10=head2 Can I get a BNF/yacc/RE for the Perl language?
11
c8db1d39
TC
12There is no BNF, but you can paw your way through the yacc grammar in
13perly.y in the source distribution if you're particularly brave. The
14grammar relies on very smart tokenizing code, so be prepared to
15venture into toke.c as well.
16
17In the words of Chaim Frenkel: "Perl's grammar can not be reduced to BNF.
18The work of parsing perl is distributed between yacc, the lexer, smoke
19and mirrors."
68dc0745 20
d92eb7b0 21=head2 What are all these $@%&* punctuation signs, and how do I know when to use them?
68dc0745 22
23They are type specifiers, as detailed in L<perldata>:
24
ac003c96
RGS
25 $ for scalar values (number, string or reference)
26 @ for arrays
27 % for hashes (associative arrays)
28 & for subroutines (aka functions, procedures, methods)
29 * for all types of that symbol name. In version 4 you used them like
30 pointers, but in modern perls you can just use references.
68dc0745 31
a6dd486b
JB
32There are couple of other symbols that you're likely to encounter that aren't
33really type specifiers:
68dc0745 34
ac003c96
RGS
35 <> are used for inputting a record from a filehandle.
36 \ takes a reference to something.
68dc0745 37
c47ff5f1
GS
38Note that <FILE> is I<neither> the type specifier for files
39nor the name of the handle. It is the C<< <> >> operator applied
a6dd486b 40to the handle FILE. It reads one line (well, record--see
197aec24 41L<perlvar/$E<sol>>) from the handle FILE in scalar context, or I<all> lines
68dc0745 42in list context. When performing open, close, or any other operation
a6dd486b 43besides C<< <> >> on files, or even when talking about the handle, do
68dc0745 44I<not> use the brackets. These are correct: C<eof(FH)>, C<seek(FH, 0,
452)> and "copying from STDIN to FILE".
46
47=head2 Do I always/never have to quote my strings or use semicolons and commas?
48
49Normally, a bareword doesn't need to be quoted, but in most cases
50probably should be (and must be under C<use strict>). But a hash key
51consisting of a simple word (that isn't the name of a defined
c47ff5f1 52subroutine) and the left-hand operand to the C<< => >> operator both
68dc0745 53count as though they were quoted:
54
ac003c96
RGS
55 This is like this
56 ------------ ---------------
57 $foo{line} $foo{'line'}
58 bar => stuff 'bar' => stuff
68dc0745 59
60The final semicolon in a block is optional, as is the final comma in a
61list. Good style (see L<perlstyle>) says to put them in except for
62one-liners:
63
ac003c96
RGS
64 if ($whoops) { exit 1 }
65 @nums = (1, 2, 3);
109f0441 66
ac003c96
RGS
67 if ($whoops) {
68 exit 1;
69 }
68dc0745 70
ac003c96 71 @lines = (
68dc0745 72 "There Beren came from mountains cold",
73 "And lost he wandered under leaves",
ac003c96 74 );
68dc0745 75
76=head2 How do I skip some return values?
77
78One way is to treat the return values as a list and index into it:
79
ac003c96 80 $dir = (getpwnam($user))[7];
68dc0745 81
82Another way is to use undef as an element on the left-hand-side:
83
ac003c96 84 ($dev, $ino, undef, undef, $uid, $gid) = stat($file);
197aec24 85
49d635f9
RGS
86You can also use a list slice to select only the elements that
87you need:
88
89 ($dev, $ino, $uid, $gid) = ( stat($file) )[0,1,4,5];
68dc0745 90
91=head2 How do I temporarily block warnings?
92
9f1b1f2d
GS
93If you are running Perl 5.6.0 or better, the C<use warnings> pragma
94allows fine control of what warning are produced.
95See L<perllexwarn> for more details.
96
ac003c96 97 {
9f1b1f2d
GS
98 no warnings; # temporarily turn off warnings
99 $a = $b + $c; # I know these might be undef
ac003c96 100 }
6670e5e7 101
28b41a80
RGS
102Additionally, you can enable and disable categories of warnings.
103You turn off the categories you want to ignore and you can still
104get other categories of warnings. See L<perllexwarn> for the
105complete details, including the category names and hierarchy.
106
107 {
108 no warnings 'uninitialized';
109 $a = $b + $c;
110 }
9f1b1f2d
GS
111
112If you have an older version of Perl, the C<$^W> variable (documented
113in L<perlvar>) controls runtime warnings for a block:
68dc0745 114
ac003c96 115 {
68dc0745 116 local $^W = 0; # temporarily turn off warnings
117 $a = $b + $c; # I know these might be undef
ac003c96 118 }
68dc0745 119
120Note that like all the punctuation variables, you cannot currently
121use my() on C<$^W>, only local().
122
68dc0745 123=head2 What's an extension?
124
a6dd486b
JB
125An extension is a way of calling compiled C code from Perl. Reading
126L<perlxstut> is a good place to learn more about extensions.
68dc0745 127
128=head2 Why do Perl operators have different precedence than C operators?
129
130Actually, they don't. All C operators that Perl copies have the same
131precedence in Perl as they do in C. The problem is with operators that C
132doesn't have, especially functions that give a list context to everything
a6dd486b 133on their right, eg. print, chmod, exec, and so on. Such functions are
68dc0745 134called "list operators" and appear as such in the precedence table in
135L<perlop>.
136
137A common mistake is to write:
138
ac003c96 139 unlink $file || die "snafu";
68dc0745 140
141This gets interpreted as:
142
ac003c96 143 unlink ($file || die "snafu");
68dc0745 144
145To avoid this problem, either put in extra parentheses or use the
146super low precedence C<or> operator:
147
ac003c96
RGS
148 (unlink $file) || die "snafu";
149 unlink $file or die "snafu";
68dc0745 150
151The "English" operators (C<and>, C<or>, C<xor>, and C<not>)
152deliberately have precedence lower than that of list operators for
153just such situations as the one above.
154
155Another operator with surprising precedence is exponentiation. It
109f0441 156binds more tightly even than unary minus, making C<-2**2> produce a
68dc0745 157negative not a positive four. It is also right-associating, meaning
158that C<2**3**2> is two raised to the ninth power, not eight squared.
159
c8db1d39
TC
160Although it has the same precedence as in C, Perl's C<?:> operator
161produces an lvalue. This assigns $x to either $a or $b, depending
162on the trueness of $maybe:
163
ac003c96 164 ($maybe ? $a : $b) = $x;
c8db1d39 165
68dc0745 166=head2 How do I declare/create a structure?
167
168In general, you don't "declare" a structure. Just use a (probably
169anonymous) hash reference. See L<perlref> and L<perldsc> for details.
170Here's an example:
171
ac003c96
RGS
172 $person = {}; # new anonymous hash
173 $person->{AGE} = 24; # set field AGE to 24
174 $person->{NAME} = "Nat"; # set field NAME to "Nat"
109f0441 175
68dc0745 176If you're looking for something a bit more rigorous, try L<perltoot>.
177
178=head2 How do I create a module?
179
7678cced 180(contributed by brian d foy)
68dc0745 181
7678cced 182L<perlmod>, L<perlmodlib>, L<perlmodstyle> explain modules
cf525c36 183in all the gory details. L<perlnewmod> gives a brief
7678cced
RGS
184overview of the process along with a couple of suggestions
185about style.
65acb1b1 186
7678cced
RGS
187If you need to include C code or C library interfaces in
188your module, you'll need h2xs. h2xs will create the module
189distribution structure and the initial interface files
190you'll need. L<perlxs> and L<perlxstut> explain the details.
7207e29d 191
7678cced
RGS
192If you don't need to use C code, other tools such as
193ExtUtils::ModuleMaker and Module::Starter, can help you
194create a skeleton module distribution.
195
196You may also want to see Sam Tregar's "Writing Perl Modules
197for CPAN" ( http://apress.com/book/bookDisplay.html?bID=14 )
198which is the best hands-on guide to creating module
199distributions.
65acb1b1 200
c195e131
RGS
201=head2 How do I adopt or take over a module already on CPAN?
202
203(contributed by brian d foy)
204
205The easiest way to take over a module is to have the current
206module maintainer either make you a co-maintainer or transfer
207the module to you.
208
209If you can't reach the author for some reason (e.g. email bounces),
210the PAUSE admins at modules@perl.org can help. The PAUSE admins
211treat each case individually.
212
213=over 4
214
1b279fcb 215=item *
c195e131
RGS
216
217Get a login for the Perl Authors Upload Server (PAUSE) if you don't
218already have one: http://pause.perl.org
219
1b279fcb 220=item *
c195e131
RGS
221
222Write to modules@perl.org explaining what you did to contact the
223current maintainer. The PAUSE admins will also try to reach the
224maintainer.
225
1b279fcb 226=item *
c195e131
RGS
227
228Post a public message in a heavily trafficked site announcing your
229intention to take over the module.
230
1b279fcb 231=item *
c195e131
RGS
232
233Wait a bit. The PAUSE admins don't want to act too quickly in case
109f0441 234the current maintainer is on holiday. If there's no response to
c195e131
RGS
235private communication or the public post, a PAUSE admin can transfer
236it to you.
237
238=back
239
68dc0745 240=head2 How do I create a class?
109f0441 241X<class, creation> X<package>
68dc0745 242
109f0441
S
243(contributed by brian d foy)
244
245In Perl, a class is just a package, and methods are just subroutines.
246Perl doesn't get more formal than that and lets you set up the package
247just the way that you like it (that is, it doesn't set up anything for
248you).
249
250The Perl documentation has several tutorials that cover class
251creation, including L<perlboot> (Barnyard Object Oriented Tutorial),
252L<perltoot> (Tom's Object Oriented Tutorial), L<perlbot> (Bag o'
253Object Tricks), and L<perlobj>.
68dc0745 254
255=head2 How can I tell if a variable is tainted?
256
213329dd
JH
257You can use the tainted() function of the Scalar::Util module, available
258from CPAN (or included with Perl since release 5.8.0).
259See also L<perlsec/"Laundering and Detecting Tainted Data">.
68dc0745 260
261=head2 What's a closure?
262
263Closures are documented in L<perlref>.
264
265I<Closure> is a computer science term with a precise but
322be77c
RGS
266hard-to-explain meaning. Usually, closures are implemented in Perl as
267anonymous subroutines with lasting references to lexical variables
268outside their own scopes. These lexicals magically refer to the
109f0441 269variables that were around when the subroutine was defined (deep
322be77c
RGS
270binding).
271
272Closures are most often used in programming languages where you can
273have the return value of a function be itself a function, as you can
274in Perl. Note that some languages provide anonymous functions but are
275not capable of providing proper closures: the Python language, for
68dc0745 276example. For more information on closures, check out any textbook on
277functional programming. Scheme is a language that not only supports
278but encourages closures.
279
322be77c 280Here's a classic non-closure function-generating function:
68dc0745 281
ac003c96
RGS
282 sub add_function_generator {
283 return sub { shift() + shift() };
284 }
68dc0745 285
ac003c96
RGS
286 $add_sub = add_function_generator();
287 $sum = $add_sub->(4,5); # $sum is 9 now.
68dc0745 288
322be77c
RGS
289The anonymous subroutine returned by add_function_generator() isn't
290technically a closure because it refers to no lexicals outside its own
291scope. Using a closure gives you a I<function template> with some
292customization slots left out to be filled later.
68dc0745 293
294Contrast this with the following make_adder() function, in which the
295returned anonymous function contains a reference to a lexical variable
296outside the scope of that function itself. Such a reference requires
297that Perl return a proper closure, thus locking in for all time the
298value that the lexical had when the function was created.
299
ac003c96
RGS
300 sub make_adder {
301 my $addpiece = shift;
302 return sub { shift() + $addpiece };
303 }
109f0441 304
ac003c96
RGS
305 $f1 = make_adder(20);
306 $f2 = make_adder(555);
68dc0745 307
308Now C<&$f1($n)> is always 20 plus whatever $n you pass in, whereas
309C<&$f2($n)> is always 555 plus whatever $n you pass in. The $addpiece
310in the closure sticks around.
311
312Closures are often used for less esoteric purposes. For example, when
313you want to pass in a bit of code into a function:
314
ac003c96
RGS
315 my $line;
316 timeout( 30, sub { $line = <STDIN> } );
68dc0745 317
c47ff5f1
GS
318If the code to execute had been passed in as a string,
319C<< '$line = <STDIN>' >>, there would have been no way for the
320hypothetical timeout() function to access the lexical variable
321$line back in its caller's scope.
68dc0745 322
322be77c
RGS
323Another use for a closure is to make a variable I<private> to a
324named subroutine, e.g. a counter that gets initialized at creation
325time of the sub and can only be modified from within the sub.
326This is sometimes used with a BEGIN block in package files to make
327sure a variable doesn't get meddled with during the lifetime of the
328package:
329
ac003c96
RGS
330 BEGIN {
331 my $id = 0;
332 sub next_id { ++$id }
333 }
322be77c
RGS
334
335This is discussed in more detail in L<perlsub>, see the entry on
336I<Persistent Private Variables>.
337
46fc3d4c 338=head2 What is variable suicide and how can I prevent it?
339
9e72e4c6
RGS
340This problem was fixed in perl 5.004_05, so preventing it means upgrading
341your version of perl. ;)
46fc3d4c 342
9e72e4c6
RGS
343Variable suicide is when you (temporarily or permanently) lose the value
344of a variable. It is caused by scoping through my() and local()
345interacting with either closures or aliased foreach() iterator variables
346and subroutine arguments. It used to be easy to inadvertently lose a
347variable's value this way, but now it's much harder. Take this code:
348
ac003c96
RGS
349 my $f = 'foo';
350 sub T {
351 while ($i++ < 3) { my $f = $f; $f .= "bar"; print $f, "\n" }
352 }
353
354 T;
355 print "Finally $f\n";
46fc3d4c 356
9e72e4c6
RGS
357If you are experiencing variable suicide, that C<my $f> in the subroutine
358doesn't pick up a fresh copy of the C<$f> whose value is <foo>. The output
359shows that inside the subroutine the value of C<$f> leaks through when it
360shouldn't, as in this output:
361
362 foobar
363 foobarbar
364 foobarbarbar
365 Finally foo
366
46fc3d4c 367The $f that has "bar" added to it three times should be a new C<$f>
9e72e4c6
RGS
368C<my $f> should create a new lexical variable each time through the loop.
369The expected output is:
370
371 foobar
372 foobar
373 foobar
374 Finally foo
46fc3d4c 375
d92eb7b0 376=head2 How can I pass/return a {Function, FileHandle, Array, Hash, Method, Regex}?
68dc0745 377
d12d61cf 378You need to pass references to these objects. See L<perlsub/"Pass by
379Reference"> for this particular question, and L<perlref> for
380information on references.
a6dd486b 381
68dc0745 382=over 4
383
384=item Passing Variables and Functions
385
a6dd486b 386Regular variables and functions are quite easy to pass: just pass in a
68dc0745 387reference to an existing or anonymous variable or function:
388
ac003c96 389 func( \$some_scalar );
68dc0745 390
ac003c96
RGS
391 func( \@some_array );
392 func( [ 1 .. 10 ] );
68dc0745 393
ac003c96
RGS
394 func( \%some_hash );
395 func( { this => 10, that => 20 } );
68dc0745 396
ac003c96
RGS
397 func( \&some_func );
398 func( sub { $_[0] ** $_[1] } );
68dc0745 399
400=item Passing Filehandles
401
49d635f9
RGS
402As of Perl 5.6, you can represent filehandles with scalar variables
403which you treat as any other scalar.
404
405 open my $fh, $filename or die "Cannot open $filename! $!";
406 func( $fh );
197aec24 407
49d635f9
RGS
408 sub func {
409 my $passed_fh = shift;
197aec24 410
ac003c96 411 my $line = <$passed_fh>;
49d635f9 412 }
197aec24 413
49d635f9 414Before Perl 5.6, you had to use the C<*FH> or C<\*FH> notations.
a6dd486b 415These are "typeglobs"--see L<perldata/"Typeglobs and Filehandles">
c8db1d39
TC
416and especially L<perlsub/"Pass by Reference"> for more information.
417
d92eb7b0
GS
418=item Passing Regexes
419
d12d61cf 420Here's an example of how to pass in a string and a regular expression
421for it to match against. You construct the pattern with the C<qr//>
422operator:
68dc0745 423
ac003c96
RGS
424 sub compare($$) {
425 my ($val1, $regex) = @_;
426 my $retval = $val1 =~ /$regex/;
d92eb7b0 427 return $retval;
ac003c96
RGS
428 }
429 $match = compare("old McDonald", qr/d.*D/i);
d92eb7b0 430
68dc0745 431=item Passing Methods
432
433To pass an object method into a subroutine, you can do this:
434
ac003c96
RGS
435 call_a_lot(10, $some_obj, "methname")
436 sub call_a_lot {
437 my ($count, $widget, $trick) = @_;
438 for (my $i = 0; $i < $count; $i++) {
439 $widget->$trick();
440 }
441 }
68dc0745 442
a6dd486b
JB
443Or, you can use a closure to bundle up the object, its
444method call, and arguments:
68dc0745 445
ac003c96
RGS
446 my $whatnot = sub { $some_obj->obfuscate(@args) };
447 func($whatnot);
448 sub func {
449 my $code = shift;
450 &$code();
451 }
68dc0745 452
453You could also investigate the can() method in the UNIVERSAL class
454(part of the standard perl distribution).
455
456=back
457
458=head2 How do I create a static variable?
459
6670e5e7 460(contributed by brian d foy)
68dc0745 461
109f0441
S
462In Perl 5.10, declare the variable with C<state>. The C<state>
463declaration creates the lexical variable that persists between calls
464to the subroutine:
465
466 sub counter { state $count = 1; $counter++ }
6670e5e7
RGS
467
468You can fake a static variable by using a lexical variable which goes
a05e4845 469out of scope. In this example, you define the subroutine C<counter>, and
6670e5e7
RGS
470it uses the lexical variable C<$count>. Since you wrap this in a BEGIN
471block, C<$count> is defined at compile-time, but also goes out of
472scope at the end of the BEGIN block. The BEGIN block also ensures that
473the subroutine and the value it uses is defined at compile-time so the
474subroutine is ready to use just like any other subroutine, and you can
475put this code in the same place as other subroutines in the program
476text (i.e. at the end of the code, typically). The subroutine
477C<counter> still has a reference to the data, and is the only way you
478can access the value (and each time you do, you increment the value).
479The data in chunk of memory defined by C<$count> is private to
480C<counter>.
481
ac003c96
RGS
482 BEGIN {
483 my $count = 1;
484 sub counter { $count++ }
485 }
109f0441 486
ac003c96 487 my $start = counter();
109f0441 488
ac003c96 489 .... # code that calls counter();
109f0441 490
ac003c96 491 my $end = counter();
68dc0745 492
6670e5e7
RGS
493In the previous example, you created a function-private variable
494because only one function remembered its reference. You could define
495multiple functions while the variable is in scope, and each function
496can share the "private" variable. It's not really "static" because you
497can access it outside the function while the lexical variable is in
498scope, and even create references to it. In this example,
499C<increment_count> and C<return_count> share the variable. One
500function adds to the value and the other simply returns the value.
501They can both access C<$count>, and since it has gone out of scope,
502there is no other way to access it.
68dc0745 503
ac003c96
RGS
504 BEGIN {
505 my $count = 1;
506 sub increment_count { $count++ }
507 sub return_count { $count }
508 }
68dc0745 509
6670e5e7
RGS
510To declare a file-private variable, you still use a lexical variable.
511A file is also a scope, so a lexical variable defined in the file
512cannot be seen from any other file.
68dc0745 513
6670e5e7
RGS
514See L<perlsub/"Persistent Private Variables"> for more information.
515The discussion of closures in L<perlref> may help you even though we
516did not use anonymous subroutines in this answer. See
517L<perlsub/"Persistent Private Variables"> for details.
c8db1d39 518
68dc0745 519=head2 What's the difference between dynamic and lexical (static) scoping? Between local() and my()?
520
a6dd486b
JB
521C<local($x)> saves away the old value of the global variable C<$x>
522and assigns a new value for the duration of the subroutine I<which is
68dc0745 523visible in other functions called from that subroutine>. This is done
524at run-time, so is called dynamic scoping. local() always affects global
525variables, also called package variables or dynamic variables.
526
527C<my($x)> creates a new variable that is only visible in the current
a6dd486b 528subroutine. This is done at compile-time, so it is called lexical or
68dc0745 529static scoping. my() always affects private variables, also called
530lexical variables or (improperly) static(ly scoped) variables.
531
532For instance:
533
ac003c96
RGS
534 sub visible {
535 print "var has value $var\n";
536 }
109f0441 537
ac003c96
RGS
538 sub dynamic {
539 local $var = 'local'; # new temporary value for the still-global
540 visible(); # variable called $var
541 }
109f0441 542
ac003c96
RGS
543 sub lexical {
544 my $var = 'private'; # new private variable, $var
545 visible(); # (invisible outside of sub scope)
546 }
109f0441 547
ac003c96 548 $var = 'global';
109f0441 549
ac003c96
RGS
550 visible(); # prints global
551 dynamic(); # prints local
552 lexical(); # prints global
68dc0745 553
554Notice how at no point does the value "private" get printed. That's
555because $var only has that value within the block of the lexical()
556function, and it is hidden from called subroutine.
557
558In summary, local() doesn't make what you think of as private, local
559variables. It gives a global variable a temporary value. my() is
560what you're looking for if you want private variables.
561
197aec24 562See L<perlsub/"Private Variables via my()"> and
13a2d996 563L<perlsub/"Temporary Values via local()"> for excruciating details.
68dc0745 564
565=head2 How can I access a dynamic variable while a similarly named lexical is in scope?
566
49d635f9
RGS
567If you know your package, you can just mention it explicitly, as in
568$Some_Pack::var. Note that the notation $::var is B<not> the dynamic $var
569in the current package, but rather the one in the "main" package, as
570though you had written $main::var.
571
572 use vars '$var';
573 local $var = "global";
574 my $var = "lexical";
68dc0745 575
49d635f9
RGS
576 print "lexical is $var\n";
577 print "global is $main::var\n";
68dc0745 578
49d635f9
RGS
579Alternatively you can use the compiler directive our() to bring a
580dynamic variable into the current lexical scope.
68dc0745 581
49d635f9
RGS
582 require 5.006; # our() did not exist before 5.6
583 use vars '$var';
68dc0745 584
49d635f9
RGS
585 local $var = "global";
586 my $var = "lexical";
587
588 print "lexical is $var\n";
589
590 {
ac003c96
RGS
591 our $var;
592 print "global is $var\n";
49d635f9 593 }
68dc0745 594
595=head2 What's the difference between deep and shallow binding?
596
597In deep binding, lexical variables mentioned in anonymous subroutines
598are the same ones that were in scope when the subroutine was created.
599In shallow binding, they are whichever variables with the same names
600happen to be in scope when the subroutine is called. Perl always uses
601deep binding of lexical variables (i.e., those created with my()).
602However, dynamic variables (aka global, local, or package variables)
603are effectively shallowly bound. Consider this just one more reason
604not to use them. See the answer to L<"What's a closure?">.
605
04d666b1 606=head2 Why doesn't "my($foo) = E<lt>FILEE<gt>;" work right?
68dc0745 607
c8db1d39 608C<my()> and C<local()> give list context to the right hand side
c47ff5f1 609of C<=>. The <FH> read operation, like so many of Perl's
c8db1d39
TC
610functions and operators, can tell which context it was called in and
611behaves appropriately. In general, the scalar() function can help.
612This function does nothing to the data itself (contrary to popular myth)
613but rather tells its argument to behave in whatever its scalar fashion is.
614If that function doesn't have a defined scalar behavior, this of course
615doesn't help you (such as with sort()).
68dc0745 616
617To enforce scalar context in this particular case, however, you need
618merely omit the parentheses:
619
ac003c96
RGS
620 local($foo) = <FILE>; # WRONG
621 local($foo) = scalar(<FILE>); # ok
622 local $foo = <FILE>; # right
68dc0745 623
624You should probably be using lexical variables anyway, although the
625issue is the same here:
626
ac003c96
RGS
627 my($foo) = <FILE>; # WRONG
628 my $foo = <FILE>; # right
68dc0745 629
54310121 630=head2 How do I redefine a builtin function, operator, or method?
68dc0745 631
632Why do you want to do that? :-)
633
634If you want to override a predefined function, such as open(),
635then you'll have to import the new definition from a different
4a4eefd0 636module. See L<perlsub/"Overriding Built-in Functions">. There's
65acb1b1 637also an example in L<perltoot/"Class::Template">.
68dc0745 638
639If you want to overload a Perl operator, such as C<+> or C<**>,
640then you'll want to use the C<use overload> pragma, documented
641in L<overload>.
642
643If you're talking about obscuring method calls in parent classes,
644see L<perltoot/"Overridden Methods">.
645
646=head2 What's the difference between calling a function as &foo and foo()?
647
109f0441
S
648(contributed by brian d foy)
649
650Calling a subroutine as C<&foo> with no trailing parentheses ignores
589a5df2 651the prototype of C<foo> and passes it the current value of the argument
109f0441 652list, C<@_>. Here's an example; the C<bar> subroutine calls C<&foo>,
23bec515 653which prints its arguments list:
109f0441
S
654
655 sub bar { &foo }
656
657 sub foo { print "Args in foo are: @_\n" }
658
659 bar( qw( a b c ) );
660
661When you call C<bar> with arguments, you see that C<foo> got the same C<@_>:
68dc0745 662
109f0441 663 Args in foo are: a b c
68dc0745 664
109f0441
S
665Calling the subroutine with trailing parentheses, with or without arguments,
666does not use the current C<@_> and respects the subroutine prototype. Changing
667the example to put parentheses after the call to C<foo> changes the program:
668
669 sub bar { &foo() }
670
671 sub foo { print "Args in foo are: @_\n" }
672
673 bar( qw( a b c ) );
674
675Now the output shows that C<foo> doesn't get the C<@_> from its caller.
676
677 Args in foo are:
678
679The main use of the C<@_> pass-through feature is to write subroutines
680whose main job it is to call other subroutines for you. For further
681details, see L<perlsub>.
68dc0745 682
683=head2 How do I create a switch or case statement?
684
109f0441
S
685In Perl 5.10, use the C<given-when> construct described in L<perlsyn>:
686
687 use 5.010;
688
689 given ( $string ) {
690 when( 'Fred' ) { say "I found Fred!" }
691 when( 'Barney' ) { say "I found Barney!" }
692 when( /Bamm-?Bamm/ ) { say "I found Bamm-Bamm!" }
693 default { say "I don't recognize the name!" }
694 };
695
f449fe8a 696If one wants to use pure Perl and to be compatible with Perl versions
109f0441 697prior to 5.10, the general answer is to use C<if-elsif-else>:
c8db1d39 698
ac003c96
RGS
699 for ($variable_to_test) {
700 if (/pat1/) { } # do something
701 elsif (/pat2/) { } # do something else
702 elsif (/pat3/) { } # do something else
703 else { } # default
704 }
68dc0745 705
f449fe8a
RGS
706Here's a simple example of a switch based on pattern matching,
707lined up in a way to make it look more like a switch statement.
8305e449 708We'll do a multiway conditional based on the type of reference stored
c8db1d39
TC
709in $whatchamacallit:
710
711 SWITCH: for (ref $whatchamacallit) {
68dc0745 712
713 /^$/ && die "not a reference";
714
715 /SCALAR/ && do {
716 print_scalar($$ref);
717 last SWITCH;
718 };
719
720 /ARRAY/ && do {
721 print_array(@$ref);
722 last SWITCH;
723 };
724
725 /HASH/ && do {
726 print_hash(%$ref);
727 last SWITCH;
728 };
729
730 /CODE/ && do {
731 warn "can't print function ref";
732 last SWITCH;
733 };
734
735 # DEFAULT
736
737 warn "User defined type skipped";
738
739 }
740
f449fe8a 741See L<perlsyn> for other examples in this style.
c8db1d39
TC
742
743Sometimes you should change the positions of the constant and the variable.
744For example, let's say you wanted to test which of many answers you were
745given, but in a case-insensitive way that also allows abbreviations.
746You can use the following technique if the strings all start with
a6dd486b 747different characters or if you want to arrange the matches so that
c8db1d39
TC
748one takes precedence over another, as C<"SEND"> has precedence over
749C<"STOP"> here:
750
ac003c96
RGS
751 chomp($answer = <>);
752 if ("SEND" =~ /^\Q$answer/i) { print "Action is send\n" }
753 elsif ("STOP" =~ /^\Q$answer/i) { print "Action is stop\n" }
754 elsif ("ABORT" =~ /^\Q$answer/i) { print "Action is abort\n" }
755 elsif ("LIST" =~ /^\Q$answer/i) { print "Action is list\n" }
756 elsif ("EDIT" =~ /^\Q$answer/i) { print "Action is edit\n" }
c8db1d39 757
197aec24 758A totally different approach is to create a hash of function references.
c8db1d39 759
ac003c96
RGS
760 my %commands = (
761 "happy" => \&joy,
762 "sad", => \&sullen,
763 "done" => sub { die "See ya!" },
764 "mad" => \&angry,
765 );
109f0441 766
ac003c96
RGS
767 print "How are you? ";
768 chomp($string = <STDIN>);
769 if ($commands{$string}) {
770 $commands{$string}->();
771 } else {
772 print "No such command: $string\n";
773 }
c8db1d39 774
f449fe8a
RGS
775Starting from Perl 5.8, a source filter module, C<Switch>, can also be
776used to get switch and case. Its use is now discouraged, because it's
777not fully compatible with the native switch of Perl 5.10, and because,
778as it's implemented as a source filter, it doesn't always work as intended
779when complex syntax is involved.
780
49d635f9 781=head2 How can I catch accesses to undefined variables, functions, or methods?
68dc0745 782
783The AUTOLOAD method, discussed in L<perlsub/"Autoloading"> and
784L<perltoot/"AUTOLOAD: Proxy Methods">, lets you capture calls to
785undefined functions and methods.
786
787When it comes to undefined variables that would trigger a warning
49d635f9 788under C<use warnings>, you can promote the warning to an error.
68dc0745 789
49d635f9 790 use warnings FATAL => qw(uninitialized);
68dc0745 791
792=head2 Why can't a method included in this same file be found?
793
794Some possible reasons: your inheritance is getting confused, you've
795misspelled the method name, or the object is of the wrong type. Check
a6dd486b
JB
796out L<perltoot> for details about any of the above cases. You may
797also use C<print ref($object)> to find out the class C<$object> was
798blessed into.
68dc0745 799
800Another possible reason for problems is because you've used the
801indirect object syntax (eg, C<find Guru "Samy">) on a class name
802before Perl has seen that such a package exists. It's wisest to make
803sure your packages are all defined before you start using them, which
804will be taken care of if you use the C<use> statement instead of
a6dd486b 805C<require>. If not, make sure to use arrow notation (eg.,
c47ff5f1 806C<< Guru->find("Samy") >>) instead. Object notation is explained in
68dc0745 807L<perlobj>.
808
c8db1d39 809Make sure to read about creating modules in L<perlmod> and
ae93639c 810the perils of indirect objects in L<perlobj/"Method Invocation">.
c8db1d39 811
109f0441 812=head2 How can I find out my current or calling package?
68dc0745 813
109f0441 814(contributed by brian d foy)
68dc0745 815
109f0441
S
816To find the package you are currently in, use the special literal
817C<__PACKAGE__>, as documented in L<perldata>. You can only use the
818special literals as separate tokens, so you can't interpolate them
819into strings like you can with variables:
68dc0745 820
109f0441
S
821 my $current_package = __PACKAGE__;
822 print "I am in package $current_package\n";
68dc0745 823
109f0441
S
824If you want to find the package calling your code, perhaps to give better
825diagnostics as C<Carp> does, use the C<caller> built-in:
826
827 sub foo {
828 my @args = ...;
829 my( $package, $filename, $line ) = caller;
830
831 print "I was called from package $package\n";
832 );
833
9b03c0a2
FC
834By default, your program starts in package C<main>, so you will
835always be in some package.
109f0441 836
d12d61cf 837This is different from finding out the package an object is blessed
838into, which might not be the current package. For that, use C<blessed>
839from C<Scalar::Util>, part of the Standard Library since Perl 5.8:
840
841 use Scalar::Util qw(blessed);
842 my $object_package = blessed( $object );
843
844Most of the time, you shouldn't care what package an object is blessed
845into, however, as long as it claims to inherit from that class:
846
847 my $is_right_class = eval { $object->isa( $package ) }; # true or false
848
849And, with Perl 5.10 and later, you don't have to check for an
850inheritance to see if the object can handle a role. For that, you can
851use C<DOES>, which comes from C<UNIVERSAL>:
852
853 my $class_does_it = eval { $object->DOES( $role ) }; # true or false
854
855You can safely replace C<isa> with C<DOES> (although the converse is not true).
856
109f0441
S
857=head2 How can I comment out a large block of Perl code?
858
859(contributed by brian d foy)
46fc3d4c 860
109f0441
S
861The quick-and-dirty way to comment out more than one line of Perl is
862to surround those lines with Pod directives. You have to put these
863directives at the beginning of the line and somewhere where Perl
864expects a new statement (so not in the middle of statements like the #
865comments). You end the comment with C<=cut>, ending the Pod section:
866
867 =pod
868
869 my $object = NotGonnaHappen->new();
870
871 ignored_sub();
872
873 $wont_be_assigned = 37;
874
875 =cut
876
d12d61cf 877The quick-and-dirty method only works well when you don't plan to
109f0441
S
878leave the commented code in the source. If a Pod parser comes along,
879you're multiline comment is going to show up in the Pod translation.
d12d61cf 880A better way hides it from Pod parsers as well.
109f0441
S
881
882The C<=begin> directive can mark a section for a particular purpose.
883If the Pod parser doesn't want to handle it, it just ignores it. Label
884the comments with C<comment>. End the comment using C<=end> with the
885same label. You still need the C<=cut> to go back to Perl code from
886the Pod comment:
46fc3d4c 887
ac003c96 888 =begin comment
109f0441
S
889
890 my $object = NotGonnaHappen->new();
891
892 ignored_sub();
893
894 $wont_be_assigned = 37;
895
7678cced 896 =end comment
46fc3d4c 897
109f0441 898 =cut
fc36a67e 899
109f0441 900For more information on Pod, check out L<perlpod> and L<perlpodspec>.
c8db1d39 901
65acb1b1
TC
902=head2 How do I clear a package?
903
904Use this code, provided by Mark-Jason Dominus:
905
ac003c96
RGS
906 sub scrub_package {
907 no strict 'refs';
908 my $pack = shift;
909 die "Shouldn't delete main package"
910 if $pack eq "" || $pack eq "main";
911 my $stash = *{$pack . '::'}{HASH};
912 my $name;
913 foreach $name (keys %$stash) {
914 my $fullname = $pack . '::' . $name;
915 # Get rid of everything with that name.
916 undef $$fullname;
917 undef @$fullname;
918 undef %$fullname;
919 undef &$fullname;
920 undef *$fullname;
921 }
65acb1b1 922 }
65acb1b1 923
197aec24 924Or, if you're using a recent release of Perl, you can
65acb1b1
TC
925just use the Symbol::delete_package() function instead.
926
d92eb7b0
GS
927=head2 How can I use a variable as a variable name?
928
929Beginners often think they want to have a variable contain the name
930of a variable.
931
ac003c96
RGS
932 $fred = 23;
933 $varname = "fred";
934 ++$$varname; # $fred now 24
d92eb7b0
GS
935
936This works I<sometimes>, but it is a very bad idea for two reasons.
937
a6dd486b
JB
938The first reason is that this technique I<only works on global
939variables>. That means that if $fred is a lexical variable created
940with my() in the above example, the code wouldn't work at all: you'd
941accidentally access the global and skip right over the private lexical
942altogether. Global variables are bad because they can easily collide
943accidentally and in general make for non-scalable and confusing code.
d92eb7b0
GS
944
945Symbolic references are forbidden under the C<use strict> pragma.
946They are not true references and consequently are not reference counted
947or garbage collected.
948
949The other reason why using a variable to hold the name of another
a6dd486b 950variable is a bad idea is that the question often stems from a lack of
d92eb7b0
GS
951understanding of Perl data structures, particularly hashes. By using
952symbolic references, you are just using the package's symbol-table hash
953(like C<%main::>) instead of a user-defined hash. The solution is to
954use your own hash or a real reference instead.
955
ac003c96
RGS
956 $USER_VARS{"fred"} = 23;
957 $varname = "fred";
958 $USER_VARS{$varname}++; # not $$varname++
d92eb7b0
GS
959
960There we're using the %USER_VARS hash instead of symbolic references.
961Sometimes this comes up in reading strings from the user with variable
962references and wanting to expand them to the values of your perl
963program's variables. This is also a bad idea because it conflates the
964program-addressable namespace and the user-addressable one. Instead of
965reading a string and expanding it to the actual contents of your program's
966own variables:
967
ac003c96
RGS
968 $str = 'this has a $fred and $barney in it';
969 $str =~ s/(\$\w+)/$1/eeg; # need double eval
d92eb7b0 970
a6dd486b 971it would be better to keep a hash around like %USER_VARS and have
d92eb7b0
GS
972variable references actually refer to entries in that hash:
973
ac003c96 974 $str =~ s/\$(\w+)/$USER_VARS{$1}/g; # no /e here at all
d92eb7b0
GS
975
976That's faster, cleaner, and safer than the previous approach. Of course,
977you don't need to use a dollar sign. You could use your own scheme to
978make it less confusing, like bracketed percent symbols, etc.
979
ac003c96
RGS
980 $str = 'this has a %fred% and %barney% in it';
981 $str =~ s/%(\w+)%/$USER_VARS{$1}/g; # no /e here at all
d92eb7b0 982
a6dd486b
JB
983Another reason that folks sometimes think they want a variable to
984contain the name of a variable is because they don't know how to build
985proper data structures using hashes. For example, let's say they
986wanted two hashes in their program: %fred and %barney, and that they
987wanted to use another scalar variable to refer to those by name.
d92eb7b0 988
ac003c96
RGS
989 $name = "fred";
990 $$name{WIFE} = "wilma"; # set %fred
d92eb7b0 991
ac003c96
RGS
992 $name = "barney";
993 $$name{WIFE} = "betty"; # set %barney
d92eb7b0
GS
994
995This is still a symbolic reference, and is still saddled with the
996problems enumerated above. It would be far better to write:
997
ac003c96
RGS
998 $folks{"fred"}{WIFE} = "wilma";
999 $folks{"barney"}{WIFE} = "betty";
d92eb7b0
GS
1000
1001And just use a multilevel hash to start with.
1002
1003The only times that you absolutely I<must> use symbolic references are
1004when you really must refer to the symbol table. This may be because it's
1005something that can't take a real reference to, such as a format name.
1006Doing so may also be important for method calls, since these always go
1007through the symbol table for resolution.
1008
1009In those cases, you would turn off C<strict 'refs'> temporarily so you
1010can play around with the symbol table. For example:
1011
ac003c96
RGS
1012 @colors = qw(red blue green yellow orange purple violet);
1013 for my $name (@colors) {
1014 no strict 'refs'; # renege for the block
1015 *$name = sub { "<FONT COLOR='$name'>@_</FONT>" };
1016 }
d92eb7b0
GS
1017
1018All those functions (red(), blue(), green(), etc.) appear to be separate,
1019but the real code in the closure actually was compiled only once.
1020
1021So, sometimes you might want to use symbolic references to directly
1022manipulate the symbol table. This doesn't matter for formats, handles, and
a6dd486b
JB
1023subroutines, because they are always global--you can't use my() on them.
1024For scalars, arrays, and hashes, though--and usually for subroutines--
1025you probably only want to use hard references.
d92eb7b0 1026
5cd0b561
RGS
1027=head2 What does "bad interpreter" mean?
1028
571e049f
RGS
1029(contributed by brian d foy)
1030
5cd0b561
RGS
1031The "bad interpreter" message comes from the shell, not perl. The
1032actual message may vary depending on your platform, shell, and locale
1033settings.
1034
1035If you see "bad interpreter - no such file or directory", the first
1036line in your perl script (the "shebang" line) does not contain the
6670e5e7 1037right path to perl (or any other program capable of running scripts).
5cd0b561 1038Sometimes this happens when you move the script from one machine to
ac9dac7f 1039another and each machine has a different path to perl--/usr/bin/perl
571e049f 1040versus /usr/local/bin/perl for instance. It may also indicate
6670e5e7
RGS
1041that the source machine has CRLF line terminators and the
1042destination machine has LF only: the shell tries to find
571e049f 1043/usr/bin/perl<CR>, but can't.
5cd0b561
RGS
1044
1045If you see "bad interpreter: Permission denied", you need to make your
1046script executable.
1047
1048In either case, you should still be able to run the scripts with perl
1049explicitly:
1050
1051 % perl script.pl
1052
1053If you get a message like "perl: command not found", perl is not in
1054your PATH, which might also mean that the location of perl is not
1055where you expect it so you need to adjust your shebang line.
1056
68dc0745 1057=head1 AUTHOR AND COPYRIGHT
1058
8d2e243f 1059Copyright (c) 1997-2010 Tom Christiansen, Nathan Torkington, and
7678cced 1060other authors as noted. All rights reserved.
5a964f20 1061
5a7beb56
JH
1062This documentation is free; you can redistribute it and/or modify it
1063under the same terms as Perl itself.
5a964f20
TC
1064
1065Irrespective of its distribution, all code examples in this file
1066are hereby placed into the public domain. You are permitted and
1067encouraged to use this code in your own programs for fun
1068or for profit as you see fit. A simple comment in the code giving
1069credit would be courteous but is not required.
a6dd486b 1070