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