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