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