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