themselves abort the exit. Likewise any object destructors that need to
be called are called before the real exit. If this is a problem, you
can call C<POSIX:_exit($status)> to avoid END and destructor processing.
-See L<perlsub> for details.
+See L<perlmod> for details.
=item exp EXPR
Sends a signal to a list of processes. The first element of
the list must be the signal to send. Returns the number of
-processes successfully signaled.
+processes successfully signaled (which is not necessarily the
+same as the number actually killed).
$cnt = kill 1, $child1, $child2;
kill 9, @goners;
=item *
+The C<"#"> character allows packing and unpacking of strings where the
+packed structure contains a byte count followed by the string itself.
+You write I<length-item>C<#>I<string-item>.
+
+The I<length-item> can be any C<pack> template letter,
+and describes how the length value is packed.
+The ones likely to be of most use are integer-packing ones like
+C<"n"> (for Java strings), C<"w"> (for ASN.1 or SNMP)
+and C<"N"> (for Sun XDR).
+
+The I<string-item> must, at present, be C<"A*">, C<"a*"> or C<"Z*">.
+For C<unpack> the length of the string is obtained from the I<length-item>,
+but if you put in the '*' it will be ignored.
+
+ unpack 'C#a', "\04Gurusamy"; gives 'Guru'
+ unpack 'a3#A* A*', '007 Bond J '; gives (' Bond','J')
+ pack 'n#a* w#a*','hello,','world'; gives "\000\006hello,\005world"
+
+The I<length-item> is not returned explicitly from C<unpack>.
+
+Adding a count to the I<length-item> letter
+is unlikely to do anything useful,
+unless that letter is C<"A">, C<"a"> or C<"Z">.
+Packing with a I<length-item> of C<"a"> or C<"Z">
+may introduce C<"\000"> characters,
+which Perl does not regard as legal in numeric strings.
+
+=item *
+
The integer types C<"s">, C<"S">, C<"l">, and C<"L"> may be
immediately followed by a C<"!"> to signify native shorts or longs--as
you can see from above for example a bare C<"l"> does mean exactly 32
value: the CODE ref of the closure you just created. See L<perlsub> and
L<perlref> for details.
-=item substr EXPR,OFFSET,LEN,REPLACEMENT
+=item substr EXPR,OFFSET,LENGTH,REPLACEMENT
-=item substr EXPR,OFFSET,LEN
+=item substr EXPR,OFFSET,LENGTH
=item substr EXPR,OFFSET
Extracts a substring out of EXPR and returns it. First character is at
offset C<0>, or whatever you've set C<$[> to (but don't do that).
If OFFSET is negative (or more precisely, less than C<$[>), starts
-that far from the end of the string. If LEN is omitted, returns
-everything to the end of the string. If LEN is negative, leaves that
+that far from the end of the string. If LENGTH is omitted, returns
+everything to the end of the string. If LENGTH is negative, leaves that
many characters off the end of the string.
-If you specify a substring that is partly outside the string, the part
-within the string is returned. If the substring is totally outside
-the string a warning is produced.
-
You can use the substr() function as an lvalue, in which case EXPR
-must itself be an lvalue. If you assign something shorter than LEN,
-the string will shrink, and if you assign something longer than LEN,
+must itself be an lvalue. If you assign something shorter than LENGTH,
+the string will shrink, and if you assign something longer than LENGTH,
the string will grow to accommodate it. To keep the string the same
length you may need to pad or chop your value using C<sprintf>.
+If OFFSET and LENGTH specify a substring that is partly outside the
+string, only the part within the string is returned. If the substring
+is beyond either end of the string, substr() returns the undefined
+value and produces a warning. When used as an lvalue, specifying a
+substring that is entirely outside the string is a fatal error.
+Here's an example showing the behavior for boundary cases:
+
+ my $name = 'fred';
+ substr($name, 4) = 'dy'; # $name is now 'freddy'
+ my $null = substr $name, 6, 2; # returns '' (no warning)
+ my $oops = substr $name, 7; # returns undef, with warning
+ substr($name, 7) = 'gap'; # fatal error
+
An alternative to using substr() as an lvalue is to specify the
replacement string as the 4th argument. This allows you to replace
parts of the EXPR and return what was there before in one operation,
returned by the C<wait> call. To get the actual exit value divide by
256. See also L</exec>. This is I<not> what you want to use to capture
the output from a command, for that you should use merely backticks or
-C<qx//>, as described in L<perlop/"`STRING`">.
+C<qx//>, as described in L<perlop/"`STRING`">. Return value of -1
+indicates a failure to start the program (inspect $! for the reason).
Like C<exec>, C<system> allows you to lie to a program about its name if
you use the C<system PROGRAM LIST> syntax. Again, see L</exec>.
use sigtrap qw(SEGV BUS);
use strict qw(subs vars refs);
use subs qw(afunc blurfl);
+ use warning qw(all);
Some of these pseudo-modules import semantics into the current
block scope (like C<strict> or C<integer>, unlike ordinary modules,
no integer;
no strict 'refs';
+ no warning;
If no C<unimport> method can be found the call fails with a fatal error.