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