X-Git-Url: https://perl5.git.perl.org/perl5.git/blobdiff_plain/ab9e1bb794a9b6411f23a7479a1d2f0b62d91d9e..59f00321bbc2d04656a65e0e9ccbbd93a8708e71:/pod/perlvar.pod diff --git a/pod/perlvar.pod b/pod/perlvar.pod index df456cb..8fc7441 100644 --- a/pod/perlvar.pod +++ b/pod/perlvar.pod @@ -177,6 +177,11 @@ test. Outside a C test, this will not happen. =back +As C<$_> is a global variable, this may lead in some cases to unwanted +side-effects. As of perl 5.9.1, you can now use a lexical version of +C<$_> by declaring it in a file or in a block with C. Moreover, +declaring C restores the global C<$_> in the current scope. + (Mnemonic: underline is understood in certain operations.) =back @@ -189,10 +194,9 @@ test. Outside a C test, this will not happen. Special package variables when using sort(), see L. Because of this specialness $a and $b don't need to be declared -(using local(), use vars, or our()) even when using the strict -vars pragma. Don't lexicalize them with C or C -if you want to be able to use them in the sort() comparison block -or function. +(using use vars, or our()) even when using the C pragma. +Don't lexicalize them with C or C if you want to be +able to use them in the sort() comparison block or function. =back @@ -294,26 +298,6 @@ past where $2 ends, and so on. You can use C<$#+> to determine how many subgroups were in the last successful match. See the examples given for the C<@-> variable. -=item $MULTILINE_MATCHING - -=item $* - -Set to a non-zero integer value to do multi-line matching within a -string, 0 (or undefined) to tell Perl that it can assume that strings -contain a single line, for the purpose of optimizing pattern matches. -Pattern matches on strings containing multiple newlines can produce -confusing results when C<$*> is 0 or undefined. Default is undefined. -(Mnemonic: * matches multiple things.) This variable influences the -interpretation of only C<^> and C<$>. A literal newline can be searched -for even when C<$* == 0>. - -Use of C<$*> is deprecated in modern Perl, supplanted by -the C and C modifiers on pattern matching. - -Assigning a non-numerical value to C<$*> triggers a warning (and makes -C<$*> act if C<$* == 0>), while assigning a numerical value to C<$*> -makes that an implicit C is applied on the value. - =item HANDLE->input_line_number(EXPR) =item $INPUT_LINE_NUMBER @@ -491,8 +475,6 @@ taken for something more important.) Consider using "real" multidimensional arrays as described in L. -=item $OFMT - =item $# The output format for printed numbers. This variable is a half-hearted @@ -695,7 +677,7 @@ In the above I stands for anything: zero, non-zero, C. A successful system or library call does B set the variable to zero. -If used an a string, yields the corresponding system error string. +If used as a string, yields the corresponding system error string. You can assign a number to C<$!> to set I if, for instance, you want C<"$!"> to return the string for error I, or you want to set the exit value for the die() operator. (Mnemonic: What just @@ -858,20 +840,36 @@ and C<$)> can be swapped only on machines supporting setregid(). =item $0 -Contains the name of the program being executed. On some operating -systems assigning to C<$0> modifies the argument area that the B -program sees. This is more useful as a way of indicating the current -program state than it is for hiding the program you're running. -(Mnemonic: same as B and B.) +Contains the name of the program being executed. + +On some (read: not all) operating systems assigning to C<$0> modifies +the argument area that the C program sees. On some platforms you +may have to use special C options or a different C to see the +changes. Modifying the $0 is more useful as a way of indicating the +current program state than it is for hiding the program you're +running. (Mnemonic: same as B and B.) + +Note that there are platform specific limitations on the the maximum +length of C<$0>. In the most extreme case it may be limited to the +space occupied by the original C<$0>. + +In some platforms there may be arbitrary amount of padding, for +example space characters, after the modified name as shown by C. +In some platforms this padding may extend all the way to the original +length of the argument area, no matter what you do (this is the case +for example with Linux 2.2). Note for BSD users: setting C<$0> does not completely remove "perl" -from the ps(1) output. For example, setting C<$0> to C<"foobar"> will -result in C<"perl: foobar (perl)">. This is an operating system -feature. +from the ps(1) output. For example, setting C<$0> to C<"foobar"> may +result in C<"perl: foobar (perl)"> (whether both the C<"perl: "> prefix +and the " (perl)" suffix are shown depends on your exact BSD variant +and version). This is an operating system feature, Perl cannot help it. In multithreaded scripts Perl coordinates the threads so that any thread may modify its copy of the C<$0> and the change becomes visible -to ps(1) (assuming the operating system plays along). +to ps(1) (assuming the operating system plays along). Note that the +the view of C<$0> the other threads have will not change since they +have their own copies of it. =item $[ @@ -883,8 +881,14 @@ subscripting and when evaluating the index() and substr() functions. As of release 5 of Perl, assignment to C<$[> is treated as a compiler directive, and cannot influence the behavior of any other file. +(That's why you can only assign compile-time constants to it.) Its use is highly discouraged. +Note that, unlike other compile-time directives (such as L), +assignment to $[ can be seen from outer lexical scopes in the same file. +However, you can use local() on it to strictly bound its value to a +lexical block. + =item $] The version + patchlevel / 1000 of the Perl interpreter. This variable @@ -916,7 +920,8 @@ C<$^C = 1> is similar to calling C. =item $^D The current value of the debugging flags. (Mnemonic: value of B<-D> -switch.) +switch.) May be read or set. Like its command-line equivalent, you can use +numeric or symbolic values, eg C<$^D = 10> or C<$^D = "st">. =item $SYSTEM_FD_MAX @@ -1075,6 +1080,10 @@ Provide informative "file" names for evals based on the place they were compiled Provide informative names to anonymous subroutines based on the place they were compiled. +=item 0x400 + +Debug assertion subroutines enter/exit. + =back Some bits may be relevant at compile-time only, some at @@ -1329,20 +1338,11 @@ Be sure not to use a bareword as the name of a signal handler, lest you inadvertently call it. If your system has the sigaction() function then signal handlers are -installed using it. This means you get reliable signal handling. If -your system has the SA_RESTART flag it is used when signals handlers are -installed. This means that system calls for which restarting is supported -continue rather than returning when a signal arrives. If you want your -system calls to be interrupted by signal delivery then do something like -this: - - use POSIX ':signal_h'; - - my $alarm = 0; - sigaction SIGALRM, new POSIX::SigAction sub { $alarm = 1 } - or die "Error setting SIGALRM handler: $!\n"; +installed using it. This means you get reliable signal handling. -See L. +The default delivery policy of signals changed in Perl 5.8.0 from +immediate (also known as "unsafe") to deferred, also known as +"safe signals". See L for more information. Certain internal hooks can be also set using the %SIG hash. The routine indicated by C<$SIG{__WARN__}> is called when a warning message is