|Perl Language Reference Manual|
by Larry Wall and others
Paperback (6"x9"), 724 pages
RRP £29.95 ($39.95)
Sales of this book support The Perl Foundation! Get a printed copy>>>
28.1.4 System Interaction
Not all platforms provide a command line. These are usually platforms that rely primarily on a Graphical User Interface (GUI) for user interaction. A program requiring a command line interface might not work everywhere. This is probably for the user of the program to deal with, so don't stay up late worrying about it.
Some platforms can't delete or rename files held open by the system,
this limitation may also apply to changing filesystem metainformation
like file permissions or owners. Remember to
close files when you
are done with them. Don't
rename an open file. Don't
open a file already tied or opened;
Don't open the same file more than once at a time for writing, as some operating systems put mandatory locks on such files.
Don't assume that write/modify permission on a directory gives the right to add or delete files/directories in that directory. That is filesystem specific: in some filesystems you need write/modify permission also (or even just) in the file/directory itself. In some filesystems (AFS, DFS) the permission to add/delete directory entries is a completely separate permission.
Don't assume that a single
unlink completely gets rid of the file:
some filesystems (most notably the ones in VMS) have versioned
filesystems, and unlink() removes only the most recent one (it doesn't
remove all the versions because by default the native tools on those
platforms remove just the most recent version, too). The portable
idiom to remove all the versions of a file is
1 while unlink "file";
This will terminate if the file is undeleteable for some reason (protected, not there, and so on).
Don't count on a specific environment variable existing in
Don't count on
%ENV entries being case-sensitive, or even
case-preserving. Don't try to clear %ENV by saying
%ENV = ();, or,
if you really have to, make it conditional on
$^O ne 'VMS' since in
%ENV table is much more than a per-process key-value string
On VMS, some entries in the %ENV hash are dynamically created when
their key is used on a read if they did not previously exist. The
are known to be dynamically generated. The specific names that are
dynamically generated may vary with the version of the C library on VMS,
and more may exist than is documented.
On VMS by default, changes to the %ENV hash are persistent after the process exits. This can cause unintended issues.
Don't count on signals or
%SIG for anything.
Don't count on filename globbing. Use
Don't count on per-program environment variables, or per-program current directories.
Don't count on specific values of
$!, neither numeric nor
especially the strings values. Users may switch their locales causing
error messages to be translated into their languages. If you can
trust a POSIXish environment, you can portably use the symbols defined
by the Errno module, like ENOENT. And don't trust on the values of
at all except immediately after a failed system call.
|ISBN 9781906966027||Perl Language Reference Manual||See the print edition|