This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
perldelta: present tense for changes alreday in effect
[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
4c7f4b6b
FC
32There are a couple of other symbols that
33you're likely to encounter that aren't
a6dd486b 34really type specifiers:
68dc0745 35
ac003c96
RGS
36 <> are used for inputting a record from a filehandle.
37 \ takes a reference to something.
68dc0745 38
c47ff5f1
GS
39Note that <FILE> is I<neither> the type specifier for files
40nor the name of the handle. It is the C<< <> >> operator applied
a6dd486b 41to the handle FILE. It reads one line (well, record--see
197aec24 42L<perlvar/$E<sol>>) from the handle FILE in scalar context, or I<all> lines
68dc0745 43in list context. When performing open, close, or any other operation
a6dd486b 44besides C<< <> >> on files, or even when talking about the handle, do
68dc0745 45I<not> use the brackets. These are correct: C<eof(FH)>, C<seek(FH, 0,
462)> and "copying from STDIN to FILE".
47
48=head2 Do I always/never have to quote my strings or use semicolons and commas?
49
50Normally, a bareword doesn't need to be quoted, but in most cases
51probably should be (and must be under C<use strict>). But a hash key
b056a7aa
FC
52consisting of a simple word and the left-hand
53operand to the C<< => >> operator both
68dc0745 54count as though they were quoted:
55
ac003c96
RGS
56 This is like this
57 ------------ ---------------
58 $foo{line} $foo{'line'}
59 bar => stuff 'bar' => stuff
68dc0745 60
61The final semicolon in a block is optional, as is the final comma in a
62list. Good style (see L<perlstyle>) says to put them in except for
63one-liners:
64
ac003c96
RGS
65 if ($whoops) { exit 1 }
66 @nums = (1, 2, 3);
109f0441 67
ac003c96
RGS
68 if ($whoops) {
69 exit 1;
70 }
68dc0745 71
ac003c96 72 @lines = (
68dc0745 73 "There Beren came from mountains cold",
74 "And lost he wandered under leaves",
ac003c96 75 );
68dc0745 76
77=head2 How do I skip some return values?
78
79One way is to treat the return values as a list and index into it:
80
ac003c96 81 $dir = (getpwnam($user))[7];
68dc0745 82
83Another way is to use undef as an element on the left-hand-side:
84
ac003c96 85 ($dev, $ino, undef, undef, $uid, $gid) = stat($file);
197aec24 86
49d635f9
RGS
87You can also use a list slice to select only the elements that
88you need:
89
90 ($dev, $ino, $uid, $gid) = ( stat($file) )[0,1,4,5];
68dc0745 91
92=head2 How do I temporarily block warnings?
93
9f1b1f2d
GS
94If you are running Perl 5.6.0 or better, the C<use warnings> pragma
95allows fine control of what warning are produced.
96See L<perllexwarn> for more details.
97
ac003c96 98 {
9f1b1f2d
GS
99 no warnings; # temporarily turn off warnings
100 $a = $b + $c; # I know these might be undef
ac003c96 101 }
6670e5e7 102
28b41a80
RGS
103Additionally, you can enable and disable categories of warnings.
104You turn off the categories you want to ignore and you can still
105get other categories of warnings. See L<perllexwarn> for the
106complete details, including the category names and hierarchy.
107
108 {
109 no warnings 'uninitialized';
110 $a = $b + $c;
111 }
9f1b1f2d
GS
112
113If you have an older version of Perl, the C<$^W> variable (documented
114in L<perlvar>) controls runtime warnings for a block:
68dc0745 115
ac003c96 116 {
68dc0745 117 local $^W = 0; # temporarily turn off warnings
118 $a = $b + $c; # I know these might be undef
ac003c96 119 }
68dc0745 120
121Note that like all the punctuation variables, you cannot currently
122use my() on C<$^W>, only local().
123
68dc0745 124=head2 What's an extension?
125
a6dd486b
JB
126An extension is a way of calling compiled C code from Perl. Reading
127L<perlxstut> is a good place to learn more about extensions.
68dc0745 128
129=head2 Why do Perl operators have different precedence than C operators?
130
131Actually, they don't. All C operators that Perl copies have the same
132precedence in Perl as they do in C. The problem is with operators that C
133doesn't have, especially functions that give a list context to everything
a6dd486b 134on their right, eg. print, chmod, exec, and so on. Such functions are
68dc0745 135called "list operators" and appear as such in the precedence table in
136L<perlop>.
137
138A common mistake is to write:
139
ac003c96 140 unlink $file || die "snafu";
68dc0745 141
142This gets interpreted as:
143
ac003c96 144 unlink ($file || die "snafu");
68dc0745 145
146To avoid this problem, either put in extra parentheses or use the
147super low precedence C<or> operator:
148
ac003c96
RGS
149 (unlink $file) || die "snafu";
150 unlink $file or die "snafu";
68dc0745 151
152The "English" operators (C<and>, C<or>, C<xor>, and C<not>)
153deliberately have precedence lower than that of list operators for
154just such situations as the one above.
155
156Another operator with surprising precedence is exponentiation. It
109f0441 157binds more tightly even than unary minus, making C<-2**2> produce a
68dc0745 158negative not a positive four. It is also right-associating, meaning
159that C<2**3**2> is two raised to the ninth power, not eight squared.
160
c8db1d39
TC
161Although it has the same precedence as in C, Perl's C<?:> operator
162produces an lvalue. This assigns $x to either $a or $b, depending
163on the trueness of $maybe:
164
ac003c96 165 ($maybe ? $a : $b) = $x;
c8db1d39 166
68dc0745 167=head2 How do I declare/create a structure?
168
169In general, you don't "declare" a structure. Just use a (probably
170anonymous) hash reference. See L<perlref> and L<perldsc> for details.
171Here's an example:
172
ac003c96
RGS
173 $person = {}; # new anonymous hash
174 $person->{AGE} = 24; # set field AGE to 24
175 $person->{NAME} = "Nat"; # set field NAME to "Nat"
109f0441 176
68dc0745 177If you're looking for something a bit more rigorous, try L<perltoot>.
178
179=head2 How do I create a module?
180
7678cced 181(contributed by brian d foy)
68dc0745 182
7678cced 183L<perlmod>, L<perlmodlib>, L<perlmodstyle> explain modules
cf525c36 184in all the gory details. L<perlnewmod> gives a brief
7678cced
RGS
185overview of the process along with a couple of suggestions
186about style.
65acb1b1 187
7678cced
RGS
188If you need to include C code or C library interfaces in
189your module, you'll need h2xs. h2xs will create the module
190distribution structure and the initial interface files
191you'll need. L<perlxs> and L<perlxstut> explain the details.
7207e29d 192
7678cced
RGS
193If you don't need to use C code, other tools such as
194ExtUtils::ModuleMaker and Module::Starter, can help you
195create a skeleton module distribution.
196
197You may also want to see Sam Tregar's "Writing Perl Modules
198for CPAN" ( http://apress.com/book/bookDisplay.html?bID=14 )
199which is the best hands-on guide to creating module
200distributions.
65acb1b1 201
c195e131
RGS
202=head2 How do I adopt or take over a module already on CPAN?
203
204(contributed by brian d foy)
205
206The easiest way to take over a module is to have the current
207module maintainer either make you a co-maintainer or transfer
208the module to you.
209
210If you can't reach the author for some reason (e.g. email bounces),
211the PAUSE admins at modules@perl.org can help. The PAUSE admins
212treat each case individually.
213
214=over 4
215
1b279fcb 216=item *
c195e131
RGS
217
218Get a login for the Perl Authors Upload Server (PAUSE) if you don't
219already have one: http://pause.perl.org
220
1b279fcb 221=item *
c195e131
RGS
222
223Write to modules@perl.org explaining what you did to contact the
224current maintainer. The PAUSE admins will also try to reach the
225maintainer.
226
1b279fcb 227=item *
c195e131
RGS
228
229Post a public message in a heavily trafficked site announcing your
230intention to take over the module.
231
1b279fcb 232=item *
c195e131
RGS
233
234Wait a bit. The PAUSE admins don't want to act too quickly in case
109f0441 235the current maintainer is on holiday. If there's no response to
c195e131
RGS
236private communication or the public post, a PAUSE admin can transfer
237it to you.
238
239=back
240
68dc0745 241=head2 How do I create a class?
109f0441 242X<class, creation> X<package>
68dc0745 243
109f0441
S
244(contributed by brian d foy)
245
246In Perl, a class is just a package, and methods are just subroutines.
247Perl doesn't get more formal than that and lets you set up the package
248just the way that you like it (that is, it doesn't set up anything for
249you).
250
251The Perl documentation has several tutorials that cover class
252creation, including L<perlboot> (Barnyard Object Oriented Tutorial),
253L<perltoot> (Tom's Object Oriented Tutorial), L<perlbot> (Bag o'
254Object Tricks), and L<perlobj>.
68dc0745 255
256=head2 How can I tell if a variable is tainted?
257
213329dd
JH
258You can use the tainted() function of the Scalar::Util module, available
259from CPAN (or included with Perl since release 5.8.0).
260See also L<perlsec/"Laundering and Detecting Tainted Data">.
68dc0745 261
262=head2 What's a closure?
263
264Closures are documented in L<perlref>.
265
266I<Closure> is a computer science term with a precise but
322be77c
RGS
267hard-to-explain meaning. Usually, closures are implemented in Perl as
268anonymous subroutines with lasting references to lexical variables
269outside their own scopes. These lexicals magically refer to the
109f0441 270variables that were around when the subroutine was defined (deep
322be77c
RGS
271binding).
272
273Closures are most often used in programming languages where you can
274have the return value of a function be itself a function, as you can
275in Perl. Note that some languages provide anonymous functions but are
276not capable of providing proper closures: the Python language, for
68dc0745 277example. For more information on closures, check out any textbook on
278functional programming. Scheme is a language that not only supports
279but encourages closures.
280
322be77c 281Here's a classic non-closure function-generating function:
68dc0745 282
ac003c96
RGS
283 sub add_function_generator {
284 return sub { shift() + shift() };
285 }
68dc0745 286
ac003c96
RGS
287 $add_sub = add_function_generator();
288 $sum = $add_sub->(4,5); # $sum is 9 now.
68dc0745 289
322be77c
RGS
290The anonymous subroutine returned by add_function_generator() isn't
291technically a closure because it refers to no lexicals outside its own
292scope. Using a closure gives you a I<function template> with some
293customization slots left out to be filled later.
68dc0745 294
295Contrast this with the following make_adder() function, in which the
296returned anonymous function contains a reference to a lexical variable
297outside the scope of that function itself. Such a reference requires
298that Perl return a proper closure, thus locking in for all time the
299value that the lexical had when the function was created.
300
ac003c96
RGS
301 sub make_adder {
302 my $addpiece = shift;
303 return sub { shift() + $addpiece };
304 }
109f0441 305
ac003c96
RGS
306 $f1 = make_adder(20);
307 $f2 = make_adder(555);
68dc0745 308
309Now C<&$f1($n)> is always 20 plus whatever $n you pass in, whereas
310C<&$f2($n)> is always 555 plus whatever $n you pass in. The $addpiece
311in the closure sticks around.
312
313Closures are often used for less esoteric purposes. For example, when
314you want to pass in a bit of code into a function:
315
ac003c96
RGS
316 my $line;
317 timeout( 30, sub { $line = <STDIN> } );
68dc0745 318
c47ff5f1
GS
319If the code to execute had been passed in as a string,
320C<< '$line = <STDIN>' >>, there would have been no way for the
321hypothetical timeout() function to access the lexical variable
322$line back in its caller's scope.
68dc0745 323
322be77c
RGS
324Another use for a closure is to make a variable I<private> to a
325named subroutine, e.g. a counter that gets initialized at creation
326time of the sub and can only be modified from within the sub.
327This is sometimes used with a BEGIN block in package files to make
328sure a variable doesn't get meddled with during the lifetime of the
329package:
330
ac003c96
RGS
331 BEGIN {
332 my $id = 0;
333 sub next_id { ++$id }
334 }
322be77c 335
4c7f4b6b 336This is discussed in more detail in L<perlsub>; see the entry on
322be77c
RGS
337I<Persistent Private Variables>.
338
46fc3d4c 339=head2 What is variable suicide and how can I prevent it?
340
9e72e4c6
RGS
341This problem was fixed in perl 5.004_05, so preventing it means upgrading
342your version of perl. ;)
46fc3d4c 343
9e72e4c6
RGS
344Variable suicide is when you (temporarily or permanently) lose the value
345of a variable. It is caused by scoping through my() and local()
346interacting with either closures or aliased foreach() iterator variables
347and subroutine arguments. It used to be easy to inadvertently lose a
348variable's value this way, but now it's much harder. Take this code:
349
ac003c96
RGS
350 my $f = 'foo';
351 sub T {
352 while ($i++ < 3) { my $f = $f; $f .= "bar"; print $f, "\n" }
353 }
354
355 T;
356 print "Finally $f\n";
46fc3d4c 357
9e72e4c6
RGS
358If you are experiencing variable suicide, that C<my $f> in the subroutine
359doesn't pick up a fresh copy of the C<$f> whose value is <foo>. The output
360shows that inside the subroutine the value of C<$f> leaks through when it
361shouldn't, as in this output:
362
363 foobar
364 foobarbar
365 foobarbarbar
366 Finally foo
367
46fc3d4c 368The $f that has "bar" added to it three times should be a new C<$f>
9e72e4c6
RGS
369C<my $f> should create a new lexical variable each time through the loop.
370The expected output is:
371
372 foobar
373 foobar
374 foobar
375 Finally foo
46fc3d4c 376
d92eb7b0 377=head2 How can I pass/return a {Function, FileHandle, Array, Hash, Method, Regex}?
68dc0745 378
d12d61cf 379You need to pass references to these objects. See L<perlsub/"Pass by
380Reference"> for this particular question, and L<perlref> for
381information on references.
a6dd486b 382
68dc0745 383=over 4
384
385=item Passing Variables and Functions
386
a6dd486b 387Regular variables and functions are quite easy to pass: just pass in a
68dc0745 388reference to an existing or anonymous variable or function:
389
ac003c96 390 func( \$some_scalar );
68dc0745 391
ac003c96
RGS
392 func( \@some_array );
393 func( [ 1 .. 10 ] );
68dc0745 394
ac003c96
RGS
395 func( \%some_hash );
396 func( { this => 10, that => 20 } );
68dc0745 397
ac003c96
RGS
398 func( \&some_func );
399 func( sub { $_[0] ** $_[1] } );
68dc0745 400
401=item Passing Filehandles
402
49d635f9
RGS
403As of Perl 5.6, you can represent filehandles with scalar variables
404which you treat as any other scalar.
405
406 open my $fh, $filename or die "Cannot open $filename! $!";
407 func( $fh );
197aec24 408
49d635f9
RGS
409 sub func {
410 my $passed_fh = shift;
197aec24 411
ac003c96 412 my $line = <$passed_fh>;
49d635f9 413 }
197aec24 414
49d635f9 415Before Perl 5.6, you had to use the C<*FH> or C<\*FH> notations.
a6dd486b 416These are "typeglobs"--see L<perldata/"Typeglobs and Filehandles">
c8db1d39
TC
417and especially L<perlsub/"Pass by Reference"> for more information.
418
d92eb7b0
GS
419=item Passing Regexes
420
d12d61cf 421Here's an example of how to pass in a string and a regular expression
422for it to match against. You construct the pattern with the C<qr//>
423operator:
68dc0745 424
ac003c96
RGS
425 sub compare($$) {
426 my ($val1, $regex) = @_;
427 my $retval = $val1 =~ /$regex/;
d92eb7b0 428 return $retval;
ac003c96
RGS
429 }
430 $match = compare("old McDonald", qr/d.*D/i);
d92eb7b0 431
68dc0745 432=item Passing Methods
433
434To pass an object method into a subroutine, you can do this:
435
ac003c96
RGS
436 call_a_lot(10, $some_obj, "methname")
437 sub call_a_lot {
438 my ($count, $widget, $trick) = @_;
439 for (my $i = 0; $i < $count; $i++) {
440 $widget->$trick();
441 }
442 }
68dc0745 443
a6dd486b
JB
444Or, you can use a closure to bundle up the object, its
445method call, and arguments:
68dc0745 446
ac003c96
RGS
447 my $whatnot = sub { $some_obj->obfuscate(@args) };
448 func($whatnot);
449 sub func {
450 my $code = shift;
451 &$code();
452 }
68dc0745 453
454You could also investigate the can() method in the UNIVERSAL class
455(part of the standard perl distribution).
456
457=back
458
459=head2 How do I create a static variable?
460
6670e5e7 461(contributed by brian d foy)
68dc0745 462
109f0441
S
463In Perl 5.10, declare the variable with C<state>. The C<state>
464declaration creates the lexical variable that persists between calls
465to the subroutine:
466
467 sub counter { state $count = 1; $counter++ }
6670e5e7
RGS
468
469You can fake a static variable by using a lexical variable which goes
a05e4845 470out of scope. In this example, you define the subroutine C<counter>, and
6670e5e7
RGS
471it uses the lexical variable C<$count>. Since you wrap this in a BEGIN
472block, C<$count> is defined at compile-time, but also goes out of
473scope at the end of the BEGIN block. The BEGIN block also ensures that
474the subroutine and the value it uses is defined at compile-time so the
475subroutine is ready to use just like any other subroutine, and you can
476put this code in the same place as other subroutines in the program
477text (i.e. at the end of the code, typically). The subroutine
478C<counter> still has a reference to the data, and is the only way you
479can access the value (and each time you do, you increment the value).
480The data in chunk of memory defined by C<$count> is private to
481C<counter>.
482
ac003c96
RGS
483 BEGIN {
484 my $count = 1;
485 sub counter { $count++ }
486 }
109f0441 487
ac003c96 488 my $start = counter();
109f0441 489
ac003c96 490 .... # code that calls counter();
109f0441 491
ac003c96 492 my $end = counter();
68dc0745 493
6670e5e7
RGS
494In the previous example, you created a function-private variable
495because only one function remembered its reference. You could define
496multiple functions while the variable is in scope, and each function
497can share the "private" variable. It's not really "static" because you
498can access it outside the function while the lexical variable is in
499scope, and even create references to it. In this example,
500C<increment_count> and C<return_count> share the variable. One
501function adds to the value and the other simply returns the value.
502They can both access C<$count>, and since it has gone out of scope,
503there is no other way to access it.
68dc0745 504
ac003c96
RGS
505 BEGIN {
506 my $count = 1;
507 sub increment_count { $count++ }
508 sub return_count { $count }
509 }
68dc0745 510
6670e5e7
RGS
511To declare a file-private variable, you still use a lexical variable.
512A file is also a scope, so a lexical variable defined in the file
513cannot be seen from any other file.
68dc0745 514
6670e5e7
RGS
515See L<perlsub/"Persistent Private Variables"> for more information.
516The discussion of closures in L<perlref> may help you even though we
517did not use anonymous subroutines in this answer. See
518L<perlsub/"Persistent Private Variables"> for details.
c8db1d39 519
68dc0745 520=head2 What's the difference between dynamic and lexical (static) scoping? Between local() and my()?
521
a6dd486b
JB
522C<local($x)> saves away the old value of the global variable C<$x>
523and assigns a new value for the duration of the subroutine I<which is
68dc0745 524visible in other functions called from that subroutine>. This is done
525at run-time, so is called dynamic scoping. local() always affects global
526variables, also called package variables or dynamic variables.
527
528C<my($x)> creates a new variable that is only visible in the current
a6dd486b 529subroutine. This is done at compile-time, so it is called lexical or
68dc0745 530static scoping. my() always affects private variables, also called
531lexical variables or (improperly) static(ly scoped) variables.
532
533For instance:
534
ac003c96
RGS
535 sub visible {
536 print "var has value $var\n";
537 }
109f0441 538
ac003c96
RGS
539 sub dynamic {
540 local $var = 'local'; # new temporary value for the still-global
541 visible(); # variable called $var
542 }
109f0441 543
ac003c96
RGS
544 sub lexical {
545 my $var = 'private'; # new private variable, $var
546 visible(); # (invisible outside of sub scope)
547 }
109f0441 548
ac003c96 549 $var = 'global';
109f0441 550
ac003c96
RGS
551 visible(); # prints global
552 dynamic(); # prints local
553 lexical(); # prints global
68dc0745 554
555Notice how at no point does the value "private" get printed. That's
556because $var only has that value within the block of the lexical()
4c7f4b6b 557function, and it is hidden from the called subroutine.
68dc0745 558
559In summary, local() doesn't make what you think of as private, local
560variables. It gives a global variable a temporary value. my() is
561what you're looking for if you want private variables.
562
197aec24 563See L<perlsub/"Private Variables via my()"> and
13a2d996 564L<perlsub/"Temporary Values via local()"> for excruciating details.
68dc0745 565
566=head2 How can I access a dynamic variable while a similarly named lexical is in scope?
567
49d635f9
RGS
568If you know your package, you can just mention it explicitly, as in
569$Some_Pack::var. Note that the notation $::var is B<not> the dynamic $var
570in the current package, but rather the one in the "main" package, as
571though you had written $main::var.
572
573 use vars '$var';
574 local $var = "global";
575 my $var = "lexical";
68dc0745 576
49d635f9
RGS
577 print "lexical is $var\n";
578 print "global is $main::var\n";
68dc0745 579
49d635f9
RGS
580Alternatively you can use the compiler directive our() to bring a
581dynamic variable into the current lexical scope.
68dc0745 582
49d635f9
RGS
583 require 5.006; # our() did not exist before 5.6
584 use vars '$var';
68dc0745 585
49d635f9
RGS
586 local $var = "global";
587 my $var = "lexical";
588
589 print "lexical is $var\n";
590
591 {
ac003c96
RGS
592 our $var;
593 print "global is $var\n";
49d635f9 594 }
68dc0745 595
596=head2 What's the difference between deep and shallow binding?
597
598In deep binding, lexical variables mentioned in anonymous subroutines
599are the same ones that were in scope when the subroutine was created.
600In shallow binding, they are whichever variables with the same names
601happen to be in scope when the subroutine is called. Perl always uses
602deep binding of lexical variables (i.e., those created with my()).
603However, dynamic variables (aka global, local, or package variables)
604are effectively shallowly bound. Consider this just one more reason
605not to use them. See the answer to L<"What's a closure?">.
606
04d666b1 607=head2 Why doesn't "my($foo) = E<lt>FILEE<gt>;" work right?
68dc0745 608
c8db1d39 609C<my()> and C<local()> give list context to the right hand side
c47ff5f1 610of C<=>. The <FH> read operation, like so many of Perl's
c8db1d39
TC
611functions and operators, can tell which context it was called in and
612behaves appropriately. In general, the scalar() function can help.
613This function does nothing to the data itself (contrary to popular myth)
614but rather tells its argument to behave in whatever its scalar fashion is.
615If that function doesn't have a defined scalar behavior, this of course
616doesn't help you (such as with sort()).
68dc0745 617
618To enforce scalar context in this particular case, however, you need
619merely omit the parentheses:
620
ac003c96
RGS
621 local($foo) = <FILE>; # WRONG
622 local($foo) = scalar(<FILE>); # ok
623 local $foo = <FILE>; # right
68dc0745 624
625You should probably be using lexical variables anyway, although the
626issue is the same here:
627
ac003c96
RGS
628 my($foo) = <FILE>; # WRONG
629 my $foo = <FILE>; # right
68dc0745 630
54310121 631=head2 How do I redefine a builtin function, operator, or method?
68dc0745 632
633Why do you want to do that? :-)
634
635If you want to override a predefined function, such as open(),
636then you'll have to import the new definition from a different
96090e4f 637module. See L<perlsub/"Overriding Built-in Functions">.
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
4c7f4b6b 800Another possible reason for problems is that you've used the
68dc0745 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.
4c7f4b6b
FC
946They are not true references and consequently are not reference-counted
947or garbage-collected.
d92eb7b0
GS
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 983Another reason that folks sometimes think they want a variable to
4c7f4b6b 984contain the name of a variable is that they don't know how to build
a6dd486b
JB
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
4c7f4b6b 1005something that one can't take a real reference to, such as a format name.
d92eb7b0
GS
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
4c7f4b6b
FC
1021So, sometimes you might want to use symbolic references to manipulate
1022the symbol table directly. 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