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