This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
additional tests for package block syntax
[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
215=item
216
217Get a login for the Perl Authors Upload Server (PAUSE) if you don't
218already have one: http://pause.perl.org
219
220=item
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
109f0441 226=item
c195e131
RGS
227
228Post a public message in a heavily trafficked site announcing your
229intention to take over the module.
230
231=item
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
d92eb7b0 378With the exception of regexes, you need to pass references to these
68dc0745 379objects. See L<perlsub/"Pass by Reference"> for this particular
380question, and L<perlref> for information on references.
381
ac9dac7f
RGS
382See "Passing Regexes", later in L<perlfaq7>, for information on
383passing regular expressions.
a6dd486b 384
68dc0745 385=over 4
386
387=item Passing Variables and Functions
388
a6dd486b 389Regular variables and functions are quite easy to pass: just pass in a
68dc0745 390reference to an existing or anonymous variable or function:
391
ac003c96 392 func( \$some_scalar );
68dc0745 393
ac003c96
RGS
394 func( \@some_array );
395 func( [ 1 .. 10 ] );
68dc0745 396
ac003c96
RGS
397 func( \%some_hash );
398 func( { this => 10, that => 20 } );
68dc0745 399
ac003c96
RGS
400 func( \&some_func );
401 func( sub { $_[0] ** $_[1] } );
68dc0745 402
403=item Passing Filehandles
404
49d635f9
RGS
405As of Perl 5.6, you can represent filehandles with scalar variables
406which you treat as any other scalar.
407
408 open my $fh, $filename or die "Cannot open $filename! $!";
409 func( $fh );
197aec24 410
49d635f9
RGS
411 sub func {
412 my $passed_fh = shift;
197aec24 413
ac003c96 414 my $line = <$passed_fh>;
49d635f9 415 }
197aec24 416
49d635f9 417Before Perl 5.6, you had to use the C<*FH> or C<\*FH> notations.
a6dd486b 418These are "typeglobs"--see L<perldata/"Typeglobs and Filehandles">
c8db1d39
TC
419and especially L<perlsub/"Pass by Reference"> for more information.
420
d92eb7b0
GS
421=item Passing Regexes
422
423To pass regexes around, you'll need to be using a release of Perl
424sufficiently recent as to support the C<qr//> construct, pass around
425strings and use an exception-trapping eval, or else be very, very clever.
68dc0745 426
d92eb7b0
GS
427Here's an example of how to pass in a string to be regex compared
428using C<qr//>:
68dc0745 429
ac003c96
RGS
430 sub compare($$) {
431 my ($val1, $regex) = @_;
432 my $retval = $val1 =~ /$regex/;
d92eb7b0 433 return $retval;
ac003c96
RGS
434 }
435 $match = compare("old McDonald", qr/d.*D/i);
d92eb7b0 436
68dc0745 437=item Passing Methods
438
439To pass an object method into a subroutine, you can do this:
440
ac003c96
RGS
441 call_a_lot(10, $some_obj, "methname")
442 sub call_a_lot {
443 my ($count, $widget, $trick) = @_;
444 for (my $i = 0; $i < $count; $i++) {
445 $widget->$trick();
446 }
447 }
68dc0745 448
a6dd486b
JB
449Or, you can use a closure to bundle up the object, its
450method call, and arguments:
68dc0745 451
ac003c96
RGS
452 my $whatnot = sub { $some_obj->obfuscate(@args) };
453 func($whatnot);
454 sub func {
455 my $code = shift;
456 &$code();
457 }
68dc0745 458
459You could also investigate the can() method in the UNIVERSAL class
460(part of the standard perl distribution).
461
462=back
463
464=head2 How do I create a static variable?
465
6670e5e7 466(contributed by brian d foy)
68dc0745 467
109f0441
S
468In Perl 5.10, declare the variable with C<state>. The C<state>
469declaration creates the lexical variable that persists between calls
470to the subroutine:
471
472 sub counter { state $count = 1; $counter++ }
6670e5e7
RGS
473
474You can fake a static variable by using a lexical variable which goes
a05e4845 475out of scope. In this example, you define the subroutine C<counter>, and
6670e5e7
RGS
476it uses the lexical variable C<$count>. Since you wrap this in a BEGIN
477block, C<$count> is defined at compile-time, but also goes out of
478scope at the end of the BEGIN block. The BEGIN block also ensures that
479the subroutine and the value it uses is defined at compile-time so the
480subroutine is ready to use just like any other subroutine, and you can
481put this code in the same place as other subroutines in the program
482text (i.e. at the end of the code, typically). The subroutine
483C<counter> still has a reference to the data, and is the only way you
484can access the value (and each time you do, you increment the value).
485The data in chunk of memory defined by C<$count> is private to
486C<counter>.
487
ac003c96
RGS
488 BEGIN {
489 my $count = 1;
490 sub counter { $count++ }
491 }
109f0441 492
ac003c96 493 my $start = counter();
109f0441 494
ac003c96 495 .... # code that calls counter();
109f0441 496
ac003c96 497 my $end = counter();
68dc0745 498
6670e5e7
RGS
499In the previous example, you created a function-private variable
500because only one function remembered its reference. You could define
501multiple functions while the variable is in scope, and each function
502can share the "private" variable. It's not really "static" because you
503can access it outside the function while the lexical variable is in
504scope, and even create references to it. In this example,
505C<increment_count> and C<return_count> share the variable. One
506function adds to the value and the other simply returns the value.
507They can both access C<$count>, and since it has gone out of scope,
508there is no other way to access it.
68dc0745 509
ac003c96
RGS
510 BEGIN {
511 my $count = 1;
512 sub increment_count { $count++ }
513 sub return_count { $count }
514 }
68dc0745 515
6670e5e7
RGS
516To declare a file-private variable, you still use a lexical variable.
517A file is also a scope, so a lexical variable defined in the file
518cannot be seen from any other file.
68dc0745 519
6670e5e7
RGS
520See L<perlsub/"Persistent Private Variables"> for more information.
521The discussion of closures in L<perlref> may help you even though we
522did not use anonymous subroutines in this answer. See
523L<perlsub/"Persistent Private Variables"> for details.
c8db1d39 524
68dc0745 525=head2 What's the difference between dynamic and lexical (static) scoping? Between local() and my()?
526
a6dd486b
JB
527C<local($x)> saves away the old value of the global variable C<$x>
528and assigns a new value for the duration of the subroutine I<which is
68dc0745 529visible in other functions called from that subroutine>. This is done
530at run-time, so is called dynamic scoping. local() always affects global
531variables, also called package variables or dynamic variables.
532
533C<my($x)> creates a new variable that is only visible in the current
a6dd486b 534subroutine. This is done at compile-time, so it is called lexical or
68dc0745 535static scoping. my() always affects private variables, also called
536lexical variables or (improperly) static(ly scoped) variables.
537
538For instance:
539
ac003c96
RGS
540 sub visible {
541 print "var has value $var\n";
542 }
109f0441 543
ac003c96
RGS
544 sub dynamic {
545 local $var = 'local'; # new temporary value for the still-global
546 visible(); # variable called $var
547 }
109f0441 548
ac003c96
RGS
549 sub lexical {
550 my $var = 'private'; # new private variable, $var
551 visible(); # (invisible outside of sub scope)
552 }
109f0441 553
ac003c96 554 $var = 'global';
109f0441 555
ac003c96
RGS
556 visible(); # prints global
557 dynamic(); # prints local
558 lexical(); # prints global
68dc0745 559
560Notice how at no point does the value "private" get printed. That's
561because $var only has that value within the block of the lexical()
562function, and it is hidden from called subroutine.
563
564In summary, local() doesn't make what you think of as private, local
565variables. It gives a global variable a temporary value. my() is
566what you're looking for if you want private variables.
567
197aec24 568See L<perlsub/"Private Variables via my()"> and
13a2d996 569L<perlsub/"Temporary Values via local()"> for excruciating details.
68dc0745 570
571=head2 How can I access a dynamic variable while a similarly named lexical is in scope?
572
49d635f9
RGS
573If you know your package, you can just mention it explicitly, as in
574$Some_Pack::var. Note that the notation $::var is B<not> the dynamic $var
575in the current package, but rather the one in the "main" package, as
576though you had written $main::var.
577
578 use vars '$var';
579 local $var = "global";
580 my $var = "lexical";
68dc0745 581
49d635f9
RGS
582 print "lexical is $var\n";
583 print "global is $main::var\n";
68dc0745 584
49d635f9
RGS
585Alternatively you can use the compiler directive our() to bring a
586dynamic variable into the current lexical scope.
68dc0745 587
49d635f9
RGS
588 require 5.006; # our() did not exist before 5.6
589 use vars '$var';
68dc0745 590
49d635f9
RGS
591 local $var = "global";
592 my $var = "lexical";
593
594 print "lexical is $var\n";
595
596 {
ac003c96
RGS
597 our $var;
598 print "global is $var\n";
49d635f9 599 }
68dc0745 600
601=head2 What's the difference between deep and shallow binding?
602
603In deep binding, lexical variables mentioned in anonymous subroutines
604are the same ones that were in scope when the subroutine was created.
605In shallow binding, they are whichever variables with the same names
606happen to be in scope when the subroutine is called. Perl always uses
607deep binding of lexical variables (i.e., those created with my()).
608However, dynamic variables (aka global, local, or package variables)
609are effectively shallowly bound. Consider this just one more reason
610not to use them. See the answer to L<"What's a closure?">.
611
04d666b1 612=head2 Why doesn't "my($foo) = E<lt>FILEE<gt>;" work right?
68dc0745 613
c8db1d39 614C<my()> and C<local()> give list context to the right hand side
c47ff5f1 615of C<=>. The <FH> read operation, like so many of Perl's
c8db1d39
TC
616functions and operators, can tell which context it was called in and
617behaves appropriately. In general, the scalar() function can help.
618This function does nothing to the data itself (contrary to popular myth)
619but rather tells its argument to behave in whatever its scalar fashion is.
620If that function doesn't have a defined scalar behavior, this of course
621doesn't help you (such as with sort()).
68dc0745 622
623To enforce scalar context in this particular case, however, you need
624merely omit the parentheses:
625
ac003c96
RGS
626 local($foo) = <FILE>; # WRONG
627 local($foo) = scalar(<FILE>); # ok
628 local $foo = <FILE>; # right
68dc0745 629
630You should probably be using lexical variables anyway, although the
631issue is the same here:
632
ac003c96
RGS
633 my($foo) = <FILE>; # WRONG
634 my $foo = <FILE>; # right
68dc0745 635
54310121 636=head2 How do I redefine a builtin function, operator, or method?
68dc0745 637
638Why do you want to do that? :-)
639
640If you want to override a predefined function, such as open(),
641then you'll have to import the new definition from a different
4a4eefd0 642module. See L<perlsub/"Overriding Built-in Functions">. There's
65acb1b1 643also an example in L<perltoot/"Class::Template">.
68dc0745 644
645If you want to overload a Perl operator, such as C<+> or C<**>,
646then you'll want to use the C<use overload> pragma, documented
647in L<overload>.
648
649If you're talking about obscuring method calls in parent classes,
650see L<perltoot/"Overridden Methods">.
651
652=head2 What's the difference between calling a function as &foo and foo()?
653
109f0441
S
654(contributed by brian d foy)
655
656Calling a subroutine as C<&foo> with no trailing parentheses ignores
589a5df2 657the prototype of C<foo> and passes it the current value of the argument
109f0441 658list, C<@_>. Here's an example; the C<bar> subroutine calls C<&foo>,
23bec515 659which prints its arguments list:
109f0441
S
660
661 sub bar { &foo }
662
663 sub foo { print "Args in foo are: @_\n" }
664
665 bar( qw( a b c ) );
666
667When you call C<bar> with arguments, you see that C<foo> got the same C<@_>:
68dc0745 668
109f0441 669 Args in foo are: a b c
68dc0745 670
109f0441
S
671Calling the subroutine with trailing parentheses, with or without arguments,
672does not use the current C<@_> and respects the subroutine prototype. Changing
673the example to put parentheses after the call to C<foo> changes the program:
674
675 sub bar { &foo() }
676
677 sub foo { print "Args in foo are: @_\n" }
678
679 bar( qw( a b c ) );
680
681Now the output shows that C<foo> doesn't get the C<@_> from its caller.
682
683 Args in foo are:
684
685The main use of the C<@_> pass-through feature is to write subroutines
686whose main job it is to call other subroutines for you. For further
687details, see L<perlsub>.
68dc0745 688
689=head2 How do I create a switch or case statement?
690
109f0441
S
691In Perl 5.10, use the C<given-when> construct described in L<perlsyn>:
692
693 use 5.010;
694
695 given ( $string ) {
696 when( 'Fred' ) { say "I found Fred!" }
697 when( 'Barney' ) { say "I found Barney!" }
698 when( /Bamm-?Bamm/ ) { say "I found Bamm-Bamm!" }
699 default { say "I don't recognize the name!" }
700 };
701
f449fe8a 702If one wants to use pure Perl and to be compatible with Perl versions
109f0441 703prior to 5.10, the general answer is to use C<if-elsif-else>:
c8db1d39 704
ac003c96
RGS
705 for ($variable_to_test) {
706 if (/pat1/) { } # do something
707 elsif (/pat2/) { } # do something else
708 elsif (/pat3/) { } # do something else
709 else { } # default
710 }
68dc0745 711
f449fe8a
RGS
712Here's a simple example of a switch based on pattern matching,
713lined up in a way to make it look more like a switch statement.
8305e449 714We'll do a multiway conditional based on the type of reference stored
c8db1d39
TC
715in $whatchamacallit:
716
717 SWITCH: for (ref $whatchamacallit) {
68dc0745 718
719 /^$/ && die "not a reference";
720
721 /SCALAR/ && do {
722 print_scalar($$ref);
723 last SWITCH;
724 };
725
726 /ARRAY/ && do {
727 print_array(@$ref);
728 last SWITCH;
729 };
730
731 /HASH/ && do {
732 print_hash(%$ref);
733 last SWITCH;
734 };
735
736 /CODE/ && do {
737 warn "can't print function ref";
738 last SWITCH;
739 };
740
741 # DEFAULT
742
743 warn "User defined type skipped";
744
745 }
746
f449fe8a 747See L<perlsyn> for other examples in this style.
c8db1d39
TC
748
749Sometimes you should change the positions of the constant and the variable.
750For example, let's say you wanted to test which of many answers you were
751given, but in a case-insensitive way that also allows abbreviations.
752You can use the following technique if the strings all start with
a6dd486b 753different characters or if you want to arrange the matches so that
c8db1d39
TC
754one takes precedence over another, as C<"SEND"> has precedence over
755C<"STOP"> here:
756
ac003c96
RGS
757 chomp($answer = <>);
758 if ("SEND" =~ /^\Q$answer/i) { print "Action is send\n" }
759 elsif ("STOP" =~ /^\Q$answer/i) { print "Action is stop\n" }
760 elsif ("ABORT" =~ /^\Q$answer/i) { print "Action is abort\n" }
761 elsif ("LIST" =~ /^\Q$answer/i) { print "Action is list\n" }
762 elsif ("EDIT" =~ /^\Q$answer/i) { print "Action is edit\n" }
c8db1d39 763
197aec24 764A totally different approach is to create a hash of function references.
c8db1d39 765
ac003c96
RGS
766 my %commands = (
767 "happy" => \&joy,
768 "sad", => \&sullen,
769 "done" => sub { die "See ya!" },
770 "mad" => \&angry,
771 );
109f0441 772
ac003c96
RGS
773 print "How are you? ";
774 chomp($string = <STDIN>);
775 if ($commands{$string}) {
776 $commands{$string}->();
777 } else {
778 print "No such command: $string\n";
779 }
c8db1d39 780
f449fe8a
RGS
781Starting from Perl 5.8, a source filter module, C<Switch>, can also be
782used to get switch and case. Its use is now discouraged, because it's
783not fully compatible with the native switch of Perl 5.10, and because,
784as it's implemented as a source filter, it doesn't always work as intended
785when complex syntax is involved.
786
49d635f9 787=head2 How can I catch accesses to undefined variables, functions, or methods?
68dc0745 788
789The AUTOLOAD method, discussed in L<perlsub/"Autoloading"> and
790L<perltoot/"AUTOLOAD: Proxy Methods">, lets you capture calls to
791undefined functions and methods.
792
793When it comes to undefined variables that would trigger a warning
49d635f9 794under C<use warnings>, you can promote the warning to an error.
68dc0745 795
49d635f9 796 use warnings FATAL => qw(uninitialized);
68dc0745 797
798=head2 Why can't a method included in this same file be found?
799
800Some possible reasons: your inheritance is getting confused, you've
801misspelled the method name, or the object is of the wrong type. Check
a6dd486b
JB
802out L<perltoot> for details about any of the above cases. You may
803also use C<print ref($object)> to find out the class C<$object> was
804blessed into.
68dc0745 805
806Another possible reason for problems is because you've used the
807indirect object syntax (eg, C<find Guru "Samy">) on a class name
808before Perl has seen that such a package exists. It's wisest to make
809sure your packages are all defined before you start using them, which
810will be taken care of if you use the C<use> statement instead of
a6dd486b 811C<require>. If not, make sure to use arrow notation (eg.,
c47ff5f1 812C<< Guru->find("Samy") >>) instead. Object notation is explained in
68dc0745 813L<perlobj>.
814
c8db1d39 815Make sure to read about creating modules in L<perlmod> and
ae93639c 816the perils of indirect objects in L<perlobj/"Method Invocation">.
c8db1d39 817
109f0441 818=head2 How can I find out my current or calling package?
68dc0745 819
109f0441 820(contributed by brian d foy)
68dc0745 821
109f0441
S
822To find the package you are currently in, use the special literal
823C<__PACKAGE__>, as documented in L<perldata>. You can only use the
824special literals as separate tokens, so you can't interpolate them
825into strings like you can with variables:
68dc0745 826
109f0441
S
827 my $current_package = __PACKAGE__;
828 print "I am in package $current_package\n";
68dc0745 829
109f0441
S
830This is different from finding out the package an object is blessed
831into, which might not be the current package. For that, use C<blessed>
832from C<Scalar::Util>, part of the Standard Library since Perl 5.8:
833
834 use Scalar::Util qw(blessed);
835 my $object_package = blessed( $object );
836
837Most of the time, you shouldn't care what package an object is blessed
838into, however, as long as it claims to inherit from that class:
68dc0745 839
109f0441
S
840 my $is_right_class = eval { $object->isa( $package ) }; # true or false
841
842If you want to find the package calling your code, perhaps to give better
843diagnostics as C<Carp> does, use the C<caller> built-in:
844
845 sub foo {
846 my @args = ...;
847 my( $package, $filename, $line ) = caller;
848
849 print "I was called from package $package\n";
850 );
851
852By default, your program starts in package C<main>, so you should
853always be in some package unless someone uses the C<package> built-in
854with no namespace. See the C<package> entry in L<perlfunc> for the
589a5df2 855details of empty packages.
109f0441
S
856
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
877The quick-and-dirty method only works well when you don't plan to
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.
880A better way hides it from Pod parsers as well.
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