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