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