X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=pod%2Fperlfaq7.pod;h=283aa2bb34b5ca7c36b08e049e1e8acb88b7c958;hb=40d50c580e6c25e8b1b8fe1baed51a3d15af70f9;hp=1047b28634d4ae53d526886acf5a482e77c08fe1;hpb=8cc95fdbe3687330bd987cea170494b4cd263d90;p=p5sagit%2Fp5-mst-13.2.git diff --git a/pod/perlfaq7.pod b/pod/perlfaq7.pod index 1047b28..283aa2b 100644 --- a/pod/perlfaq7.pod +++ b/pod/perlfaq7.pod @@ -1,6 +1,6 @@ =head1 NAME -perlfaq7 - Perl Language Issues ($Revision: 1.16 $, $Date: 1997/03/19 17:25:23 $) +perlfaq7 - Perl Language Issues ($Revision: 1.18 $, $Date: 1997/04/24 22:44:14 $) =head1 DESCRIPTION @@ -169,7 +169,7 @@ own module. Make sure to change the names appropriately. # if using RCS/CVS, this next line may be preferred, # but beware two-digit versions. - $VERSION = do{my@r=q$Revision: 1.16 $=~/\d+/g;sprintf '%d.'.'%02d'x$#r,@r}; + $VERSION = do{my@r=q$Revision: 1.18 $=~/\d+/g;sprintf '%d.'.'%02d'x$#r,@r}; @ISA = qw(Exporter); @EXPORT = qw(&func1 &func2 &func3); @@ -298,6 +298,26 @@ ESTDINE'>, there would have been no way for the hypothetical timeout() function to access the lexical variable $line back in its caller's scope. +=head2 What is variable suicide and how can I prevent it? + +Variable suicide is when you (temporarily or permanently) lose the +value of a variable. It is caused by scoping through my() and local() +interacting with either closures or aliased foreach() interator +variables and subroutine arguments. It used to be easy to +inadvertently lose a variable's value this way, but now it's much +harder. Take this code: + + my $f = "foo"; + sub T { + while ($i++ < 3) { my $f = $f; $f .= "bar"; print $f, "\n" } + } + T; + print "Finally $f\n"; + +The $f that has "bar" added to it three times should be a new C<$f> +(C should create a new local variable each time through the +loop). It isn't, however. This is a bug, and will be fixed. + =head2 How can I pass/return a {Function, FileHandle, Array, Hash, Method, Regexp}? With the exception of regexps, you need to pass references to these @@ -539,7 +559,7 @@ Why do you want to do that? :-) If you want to override a predefined function, such as open(), then you'll have to import the new definition from a different module. See L. There's -also an example in L. +also an example in L. If you want to overload a Perl operator, such as C<+> or C<**>, then you'll want to use the C pragma, documented @@ -576,7 +596,7 @@ how best to do this, so he left it out, even though it's been on the wish list since perl1. Here's a simple example of a switch based on pattern matching. We'll -do a multiway conditional based on the type of reference stored in +do a multi-way conditional based on the type of reference stored in $whatchamacallit: SWITCH: @@ -669,6 +689,28 @@ not necessarily the same as the one in which you were compiled): warn "called me from a $class object"; } +=head2 How can I comment out a large block of perl code? + +Use embedded POD to discard it: + + # program is here + + =for nobody + This paragraph is commented out + + # program continues + + =begin comment text + + all of this stuff + + here will be ignored + by everyone + + =end comment text + + =cut + =head1 AUTHOR AND COPYRIGHT Copyright (c) 1997 Tom Christiansen and Nathan Torkington.