This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Dave remarks that I have been too terse here.
[perl5.git] / pod / perlfaq7.pod
CommitLineData
68dc0745 1=head1 NAME
2
f449fe8a 3perlfaq7 - General Perl Language Issues ($Revision: 9309 $)
68dc0745 4
5=head1 DESCRIPTION
6
7This section deals with general Perl language issues that don't
8clearly fit into any of the other sections.
9
10=head2 Can I get a BNF/yacc/RE for the Perl language?
11
c8db1d39
TC
12There is no BNF, but you can paw your way through the yacc grammar in
13perly.y in the source distribution if you're particularly brave. The
14grammar relies on very smart tokenizing code, so be prepared to
15venture into toke.c as well.
16
17In the words of Chaim Frenkel: "Perl's grammar can not be reduced to BNF.
18The work of parsing perl is distributed between yacc, the lexer, smoke
19and mirrors."
68dc0745 20
d92eb7b0 21=head2 What are all these $@%&* punctuation signs, and how do I know when to use them?
68dc0745 22
23They are type specifiers, as detailed in L<perldata>:
24
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
JB
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
GS
38Note that <FILE> is I<neither> the type specifier for files
39nor the name of the handle. It is the C<< <> >> operator applied
a6dd486b 40to the handle FILE. It reads one line (well, record--see
197aec24 41L<perlvar/$E<sol>>) from the handle FILE in scalar context, or I<all> lines
68dc0745 42in list context. When performing open, close, or any other operation
a6dd486b 43besides C<< <> >> on files, or even when talking about the handle, do
68dc0745 44I<not> use the brackets. These are correct: C<eof(FH)>, C<seek(FH, 0,
452)> and "copying from STDIN to FILE".
46
47=head2 Do I always/never have to quote my strings or use semicolons and commas?
48
49Normally, a bareword doesn't need to be quoted, but in most cases
50probably should be (and must be under C<use strict>). But a hash key
51consisting of a simple word (that isn't the name of a defined
c47ff5f1 52subroutine) and the left-hand operand to the C<< => >> operator both
68dc0745 53count as though they were quoted:
54
55 This is like this
56 ------------ ---------------
571e049f
RGS
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
RGS
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
GS
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
RGS
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
GS
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
JB
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
TC
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
RGS
183overview of the process along with a couple of suggestions
184about style.
65acb1b1 185
7678cced
RGS
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
RGS
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
JH
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
RGS
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
RGS
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
GS
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
RGS
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
RGS
290This problem was fixed in perl 5.004_05, so preventing it means upgrading
291your version of perl. ;)
46fc3d4c 292
9e72e4c6
RGS
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
RGS
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
RGS
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
RGS
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
RGS
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
RGS
360 sub func {
361 my $passed_fh = shift;
197aec24 362
49d635f9
RGS
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
TC
368and especially L<perlsub/"Pass by Reference"> for more information.
369
d92eb7b0
GS
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
GS
376Here's an example of how to pass in a string to be regex compared
377using C<qr//>:
68dc0745 378
379 sub compare($$) {
d92eb7b0
GS
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
JB
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
RGS
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
RGS
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
RGS
466 BEGIN {
467 my $count = 1;
468 sub counter { $count++ }
469 }
68dc0745 470
ee891a00 471 my $start = counter();
68dc0745 472
ee891a00 473 .... # code that calls counter();
68dc0745 474
ee891a00 475 my $end = counter();
68dc0745 476
6670e5e7
RGS
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
RGS
488 BEGIN {
489 my $count = 1;
490 sub increment_count { $count++ }
491 sub return_count { $count }
3a205795 492 }
68dc0745 493
6670e5e7
RGS
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
RGS
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
JB
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
RGS
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
RGS
560 print "lexical is $var\n";
561 print "global is $main::var\n";
68dc0745 562
49d635f9
RGS
563Alternatively you can use the compiler directive our() to bring a
564dynamic variable into the current lexical scope.
68dc0745 565
49d635f9
RGS
566 require 5.006; # our() did not exist before 5.6
567 use vars '$var';
68dc0745 568
49d635f9
RGS
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
TC
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
JB
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
f449fe8a
RGS
650If one wants to use pure Perl and to be compatible with Perl versions
651prior to 5.10, the general answer is to write a construct like this:
c8db1d39
TC
652
653 for ($variable_to_test) {
654 if (/pat1/) { } # do something
655 elsif (/pat2/) { } # do something else
656 elsif (/pat3/) { } # do something else
657 else { } # default
197aec24 658 }
68dc0745 659
f449fe8a
RGS
660Here's a simple example of a switch based on pattern matching,
661lined up in a way to make it look more like a switch statement.
8305e449 662We'll do a multiway conditional based on the type of reference stored
c8db1d39
TC
663in $whatchamacallit:
664
665 SWITCH: for (ref $whatchamacallit) {
68dc0745 666
667 /^$/ && die "not a reference";
668
669 /SCALAR/ && do {
670 print_scalar($$ref);
671 last SWITCH;
672 };
673
674 /ARRAY/ && do {
675 print_array(@$ref);
676 last SWITCH;
677 };
678
679 /HASH/ && do {
680 print_hash(%$ref);
681 last SWITCH;
682 };
683
684 /CODE/ && do {
685 warn "can't print function ref";
686 last SWITCH;
687 };
688
689 # DEFAULT
690
691 warn "User defined type skipped";
692
693 }
694
f449fe8a 695See L<perlsyn> for other examples in this style.
c8db1d39
TC
696
697Sometimes you should change the positions of the constant and the variable.
698For example, let's say you wanted to test which of many answers you were
699given, but in a case-insensitive way that also allows abbreviations.
700You can use the following technique if the strings all start with
a6dd486b 701different characters or if you want to arrange the matches so that
c8db1d39
TC
702one takes precedence over another, as C<"SEND"> has precedence over
703C<"STOP"> here:
704
705 chomp($answer = <>);
706 if ("SEND" =~ /^\Q$answer/i) { print "Action is send\n" }
707 elsif ("STOP" =~ /^\Q$answer/i) { print "Action is stop\n" }
708 elsif ("ABORT" =~ /^\Q$answer/i) { print "Action is abort\n" }
709 elsif ("LIST" =~ /^\Q$answer/i) { print "Action is list\n" }
710 elsif ("EDIT" =~ /^\Q$answer/i) { print "Action is edit\n" }
711
197aec24 712A totally different approach is to create a hash of function references.
c8db1d39
TC
713
714 my %commands = (
715 "happy" => \&joy,
716 "sad", => \&sullen,
717 "done" => sub { die "See ya!" },
718 "mad" => \&angry,
719 );
720
721 print "How are you? ";
722 chomp($string = <STDIN>);
723 if ($commands{$string}) {
724 $commands{$string}->();
725 } else {
726 print "No such command: $string\n";
197aec24 727 }
c8db1d39 728
f449fe8a
RGS
729Note that starting from version 5.10, Perl has now a native switch
730statement. See L<perlsyn>.
731
732Starting from Perl 5.8, a source filter module, C<Switch>, can also be
733used to get switch and case. Its use is now discouraged, because it's
734not fully compatible with the native switch of Perl 5.10, and because,
735as it's implemented as a source filter, it doesn't always work as intended
736when complex syntax is involved.
737
49d635f9 738=head2 How can I catch accesses to undefined variables, functions, or methods?
68dc0745 739
740The AUTOLOAD method, discussed in L<perlsub/"Autoloading"> and
741L<perltoot/"AUTOLOAD: Proxy Methods">, lets you capture calls to
742undefined functions and methods.
743
744When it comes to undefined variables that would trigger a warning
49d635f9 745under C<use warnings>, you can promote the warning to an error.
68dc0745 746
49d635f9 747 use warnings FATAL => qw(uninitialized);
68dc0745 748
749=head2 Why can't a method included in this same file be found?
750
751Some possible reasons: your inheritance is getting confused, you've
752misspelled the method name, or the object is of the wrong type. Check
a6dd486b
JB
753out L<perltoot> for details about any of the above cases. You may
754also use C<print ref($object)> to find out the class C<$object> was
755blessed into.
68dc0745 756
757Another possible reason for problems is because you've used the
758indirect object syntax (eg, C<find Guru "Samy">) on a class name
759before Perl has seen that such a package exists. It's wisest to make
760sure your packages are all defined before you start using them, which
761will be taken care of if you use the C<use> statement instead of
a6dd486b 762C<require>. If not, make sure to use arrow notation (eg.,
c47ff5f1 763C<< Guru->find("Samy") >>) instead. Object notation is explained in
68dc0745 764L<perlobj>.
765
c8db1d39 766Make sure to read about creating modules in L<perlmod> and
ae93639c 767the perils of indirect objects in L<perlobj/"Method Invocation">.
c8db1d39 768
68dc0745 769=head2 How can I find out my current package?
770
771If you're just a random program, you can do this to find
772out what the currently compiled package is:
773
c8db1d39 774 my $packname = __PACKAGE__;
68dc0745 775
a6dd486b 776But, if you're a method and you want to print an error message
68dc0745 777that includes the kind of object you were called on (which is
778not necessarily the same as the one in which you were compiled):
779
780 sub amethod {
92c2ed05 781 my $self = shift;
68dc0745 782 my $class = ref($self) || $self;
783 warn "called me from a $class object";
784 }
785
46fc3d4c 786=head2 How can I comment out a large block of perl code?
787
659cfd94 788You can use embedded POD to discard it. Enclose the blocks you want
7678cced
RGS
789to comment out in POD markers. The <=begin> directive marks a section
790for a specific formatter. Use the C<comment> format, which no formatter
791should claim to understand (by policy). Mark the end of the block
792with <=end>.
46fc3d4c 793
794 # program is here
795
7678cced 796 =begin comment
46fc3d4c 797
798 all of this stuff
799
800 here will be ignored
801 by everyone
802
7678cced 803 =end comment
6670e5e7 804
659cfd94
RGS
805 =cut
806
807 # program continues
46fc3d4c 808
f05bbc40
JH
809The pod directives cannot go just anywhere. You must put a
810pod directive where the parser is expecting a new statement,
811not just in the middle of an expression or some other
659cfd94 812arbitrary grammar production.
fc36a67e 813
f05bbc40 814See L<perlpod> for more details.
c8db1d39 815
65acb1b1
TC
816=head2 How do I clear a package?
817
818Use this code, provided by Mark-Jason Dominus:
819
820 sub scrub_package {
821 no strict 'refs';
822 my $pack = shift;
197aec24 823 die "Shouldn't delete main package"
65acb1b1
TC
824 if $pack eq "" || $pack eq "main";
825 my $stash = *{$pack . '::'}{HASH};
826 my $name;
827 foreach $name (keys %$stash) {
828 my $fullname = $pack . '::' . $name;
829 # Get rid of everything with that name.
830 undef $$fullname;
831 undef @$fullname;
832 undef %$fullname;
833 undef &$fullname;
834 undef *$fullname;
835 }
836 }
837
197aec24 838Or, if you're using a recent release of Perl, you can
65acb1b1
TC
839just use the Symbol::delete_package() function instead.
840
d92eb7b0
GS
841=head2 How can I use a variable as a variable name?
842
843Beginners often think they want to have a variable contain the name
844of a variable.
845
846 $fred = 23;
847 $varname = "fred";
848 ++$$varname; # $fred now 24
849
850This works I<sometimes>, but it is a very bad idea for two reasons.
851
a6dd486b
JB
852The first reason is that this technique I<only works on global
853variables>. That means that if $fred is a lexical variable created
854with my() in the above example, the code wouldn't work at all: you'd
855accidentally access the global and skip right over the private lexical
856altogether. Global variables are bad because they can easily collide
857accidentally and in general make for non-scalable and confusing code.
d92eb7b0
GS
858
859Symbolic references are forbidden under the C<use strict> pragma.
860They are not true references and consequently are not reference counted
861or garbage collected.
862
863The other reason why using a variable to hold the name of another
a6dd486b 864variable is a bad idea is that the question often stems from a lack of
d92eb7b0
GS
865understanding of Perl data structures, particularly hashes. By using
866symbolic references, you are just using the package's symbol-table hash
867(like C<%main::>) instead of a user-defined hash. The solution is to
868use your own hash or a real reference instead.
869
369b44b4 870 $USER_VARS{"fred"} = 23;
d92eb7b0
GS
871 $varname = "fred";
872 $USER_VARS{$varname}++; # not $$varname++
873
874There we're using the %USER_VARS hash instead of symbolic references.
875Sometimes this comes up in reading strings from the user with variable
876references and wanting to expand them to the values of your perl
877program's variables. This is also a bad idea because it conflates the
878program-addressable namespace and the user-addressable one. Instead of
879reading a string and expanding it to the actual contents of your program's
880own variables:
881
882 $str = 'this has a $fred and $barney in it';
883 $str =~ s/(\$\w+)/$1/eeg; # need double eval
884
a6dd486b 885it would be better to keep a hash around like %USER_VARS and have
d92eb7b0
GS
886variable references actually refer to entries in that hash:
887
888 $str =~ s/\$(\w+)/$USER_VARS{$1}/g; # no /e here at all
889
890That's faster, cleaner, and safer than the previous approach. Of course,
891you don't need to use a dollar sign. You could use your own scheme to
892make it less confusing, like bracketed percent symbols, etc.
893
894 $str = 'this has a %fred% and %barney% in it';
895 $str =~ s/%(\w+)%/$USER_VARS{$1}/g; # no /e here at all
896
a6dd486b
JB
897Another reason that folks sometimes think they want a variable to
898contain the name of a variable is because they don't know how to build
899proper data structures using hashes. For example, let's say they
900wanted two hashes in their program: %fred and %barney, and that they
901wanted to use another scalar variable to refer to those by name.
d92eb7b0
GS
902
903 $name = "fred";
904 $$name{WIFE} = "wilma"; # set %fred
905
197aec24 906 $name = "barney";
d92eb7b0
GS
907 $$name{WIFE} = "betty"; # set %barney
908
909This is still a symbolic reference, and is still saddled with the
910problems enumerated above. It would be far better to write:
911
912 $folks{"fred"}{WIFE} = "wilma";
913 $folks{"barney"}{WIFE} = "betty";
914
915And just use a multilevel hash to start with.
916
917The only times that you absolutely I<must> use symbolic references are
918when you really must refer to the symbol table. This may be because it's
919something that can't take a real reference to, such as a format name.
920Doing so may also be important for method calls, since these always go
921through the symbol table for resolution.
922
923In those cases, you would turn off C<strict 'refs'> temporarily so you
924can play around with the symbol table. For example:
925
926 @colors = qw(red blue green yellow orange purple violet);
927 for my $name (@colors) {
928 no strict 'refs'; # renege for the block
929 *$name = sub { "<FONT COLOR='$name'>@_</FONT>" };
197aec24 930 }
d92eb7b0
GS
931
932All those functions (red(), blue(), green(), etc.) appear to be separate,
933but the real code in the closure actually was compiled only once.
934
935So, sometimes you might want to use symbolic references to directly
936manipulate the symbol table. This doesn't matter for formats, handles, and
a6dd486b
JB
937subroutines, because they are always global--you can't use my() on them.
938For scalars, arrays, and hashes, though--and usually for subroutines--
939you probably only want to use hard references.
d92eb7b0 940
5cd0b561
RGS
941=head2 What does "bad interpreter" mean?
942
571e049f
RGS
943(contributed by brian d foy)
944
5cd0b561
RGS
945The "bad interpreter" message comes from the shell, not perl. The
946actual message may vary depending on your platform, shell, and locale
947settings.
948
949If you see "bad interpreter - no such file or directory", the first
950line in your perl script (the "shebang" line) does not contain the
6670e5e7 951right path to perl (or any other program capable of running scripts).
5cd0b561 952Sometimes this happens when you move the script from one machine to
ac9dac7f 953another and each machine has a different path to perl--/usr/bin/perl
571e049f 954versus /usr/local/bin/perl for instance. It may also indicate
6670e5e7
RGS
955that the source machine has CRLF line terminators and the
956destination machine has LF only: the shell tries to find
571e049f 957/usr/bin/perl<CR>, but can't.
5cd0b561
RGS
958
959If you see "bad interpreter: Permission denied", you need to make your
960script executable.
961
962In either case, you should still be able to run the scripts with perl
963explicitly:
964
965 % perl script.pl
966
967If you get a message like "perl: command not found", perl is not in
968your PATH, which might also mean that the location of perl is not
969where you expect it so you need to adjust your shebang line.
970
500071f4
RGS
971=head1 REVISION
972
f449fe8a 973Revision: $Revision: 9309 $
500071f4 974
f449fe8a 975Date: $Date: 2007-03-23 15:28:16 +0100 (Fri, 23 Mar 2007) $
500071f4
RGS
976
977See L<perlfaq> for source control details and availability.
978
68dc0745 979=head1 AUTHOR AND COPYRIGHT
980
ee891a00 981Copyright (c) 1997-2007 Tom Christiansen, Nathan Torkington, and
7678cced 982other authors as noted. All rights reserved.
5a964f20 983
5a7beb56
JH
984This documentation is free; you can redistribute it and/or modify it
985under the same terms as Perl itself.
5a964f20
TC
986
987Irrespective of its distribution, all code examples in this file
988are hereby placed into the public domain. You are permitted and
989encouraged to use this code in your own programs for fun
990or for profit as you see fit. A simple comment in the code giving
991credit would be courteous but is not required.
a6dd486b 992