REV2: Binary number support
[p5sagit/p5-mst-13.2.git] / pod / perlport.pod
CommitLineData
e41182b5 1=head1 NAME
2
3perlport - Writing portable Perl
4
5
6=head1 DESCRIPTION
7
8Perl runs on a variety of operating systems. While most of them share
9a lot in common, they also have their own very particular and unique
10features.
11
12This document is meant to help you to find out what constitutes portable
0a47030a 13Perl code, so that once you have made your decision to write portably,
e41182b5 14you know where the lines are drawn, and you can stay within them.
15
16There is a tradeoff between taking full advantage of B<a> particular type
0a47030a 17of computer, and taking advantage of a full B<range> of them. Naturally,
18as you make your range bigger (and thus more diverse), the common
19denominators drop, and you are left with fewer areas of common ground in
20which you can operate to accomplish a particular task. Thus, when you
21begin attacking a problem, it is important to consider which part of the
22tradeoff curve you want to operate under. Specifically, whether it is
23important to you that the task that you are coding needs the full
24generality of being portable, or if it is sufficient to just get the job
25done. This is the hardest choice to be made. The rest is easy, because
26Perl provides lots of choices, whichever way you want to approach your
27problem.
28
29Looking at it another way, writing portable code is usually about
30willfully limiting your available choices. Naturally, it takes discipline
31to do that.
e41182b5 32
33Be aware of two important points:
34
35=over 4
36
37=item Not all Perl programs have to be portable
38
39There is no reason why you should not use Perl as a language to glue Unix
40tools together, or to prototype a Macintosh application, or to manage the
41Windows registry. If it makes no sense to aim for portability for one
42reason or another in a given program, then don't bother.
43
44=item The vast majority of Perl B<is> portable
45
46Don't be fooled into thinking that it is hard to create portable Perl
47code. It isn't. Perl tries its level-best to bridge the gaps between
48what's available on different platforms, and all the means available to
49use those features. Thus almost all Perl code runs on any machine
50without modification. But there I<are> some significant issues in
51writing portable code, and this document is entirely about those issues.
52
53=back
54
55Here's the general rule: When you approach a task that is commonly done
56using a whole range of platforms, think in terms of writing portable
57code. That way, you don't sacrifice much by way of the implementation
58choices you can avail yourself of, and at the same time you can give
59your users lots of platform choices. On the other hand, when you have to
60take advantage of some unique feature of a particular platform, as is
61often the case with systems programming (whether for Unix, Windows,
62S<Mac OS>, VMS, etc.), consider writing platform-specific code.
63
0a47030a 64When the code will run on only two or three operating systems, then you
65may only need to consider the differences of those particular systems.
66The important thing is to decide where the code will run, and to be
67deliberate in your decision.
68
69The material below is separated into three main sections: main issues of
70portability (L<"ISSUES">, platform-specific issues (L<"PLATFORMS">, and
71builtin perl functions that behave differently on various ports
72(L<"FUNCTION IMPLEMENTATIONS">.
e41182b5 73
74This information should not be considered complete; it includes possibly
b8099c3d 75transient information about idiosyncrasies of some of the ports, almost
e41182b5 76all of which are in a state of constant evolution. Thus this material
77should be considered a perpetual work in progress
78(E<lt>IMG SRC="yellow_sign.gif" ALT="Under Construction"E<gt>).
79
80
0a47030a 81
82
e41182b5 83=head1 ISSUES
84
85=head2 Newlines
86
638bc118 87In most operating systems, lines in files are terminated by newlines.
e41182b5 88Just what is used as a newline may vary from OS to OS. Unix
89traditionally uses C<\012>, one kind of Windows I/O uses C<\015\012>,
90and S<Mac OS> uses C<\015>.
91
92Perl uses C<\n> to represent the "logical" newline, where what
93is logical may depend on the platform in use. In MacPerl, C<\n>
94always means C<\015>. In DOSish perls, C<\n> usually means C<\012>, but
95when accessing a file in "text" mode, STDIO translates it to (or from)
96C<\015\012>.
97
98Due to the "text" mode translation, DOSish perls have limitations
99of using C<seek> and C<tell> when a file is being accessed in "text"
100mode. Specifically, if you stick to C<seek>-ing to locations you got
101from C<tell> (and no others), you are usually free to use C<seek> and
102C<tell> even in "text" mode. In general, using C<seek> or C<tell> or
103other file operations that count bytes instead of characters, without
104considering the length of C<\n>, may be non-portable. If you use
105C<binmode> on a file, however, you can usually use C<seek> and C<tell>
106with arbitrary values quite safely.
107
108A common misconception in socket programming is that C<\n> eq C<\012>
0a47030a 109everywhere. When using protocols such as common Internet protocols,
e41182b5 110C<\012> and C<\015> are called for specifically, and the values of
111the logical C<\n> and C<\r> (carriage return) are not reliable.
112
113 print SOCKET "Hi there, client!\r\n"; # WRONG
114 print SOCKET "Hi there, client!\015\012"; # RIGHT
115
116[NOTE: this does not necessarily apply to communications that are
117filtered by another program or module before sending to the socket; the
118the most popular EBCDIC webserver, for instance, accepts C<\r\n>,
119which translates those characters, along with all other
120characters in text streams, from EBCDIC to ASCII.]
121
0a47030a 122However, using C<\015\012> (or C<\cM\cJ>, or C<\x0D\x0A>) can be tedious
123and unsightly, as well as confusing to those maintaining the code. As
124such, the C<Socket> module supplies the Right Thing for those who want it.
e41182b5 125
126 use Socket qw(:DEFAULT :crlf);
127 print SOCKET "Hi there, client!$CRLF" # RIGHT
128
129When reading I<from> a socket, remember that the default input record
130separator (C<$/>) is C<\n>, but code like this should recognize C<$/> as
131C<\012> or C<\015\012>:
132
133 while (<SOCKET>) {
134 # ...
135 }
136
137Better:
138
139 use Socket qw(:DEFAULT :crlf);
140 local($/) = LF; # not needed if $/ is already \012
141
142 while (<SOCKET>) {
143 s/$CR?$LF/\n/; # not sure if socket uses LF or CRLF, OK
144 # s/\015?\012/\n/; # same thing
145 }
146
147And this example is actually better than the previous one even for Unix
148platforms, because now any C<\015>'s (C<\cM>'s) are stripped out
149(and there was much rejoicing).
150
151
322422de 152=head2 Numbers endianness and Width
153
154Different CPUs store integers and floating point numbers in different
155orders (called I<endianness>) and widths (32-bit and 64-bit being the
156most common). This affects your programs if they attempt to transfer
157numbers in binary format from a CPU architecture to another over some
158channel: either 'live' via network connections or storing the numbers
159to secondary storage such as a disk file.
160
161Conflicting storage orders make utter mess out of the numbers: if a
162little-endian host (Intel, Alpha) stores 0x12345678 (305419896 in
163decimal), a big-endian host (Motorola, MIPS, Sparc, PA) reads it as
1640x78563412 (2018915346 in decimal). To avoid this problem in network
165(socket) connections use the C<pack()> and C<unpack()> formats C<"n">
166and C<"N">, the "network" orders, they are guaranteed to be portable.
167
168Different widths can cause truncation even between platforms of equal
169endianness: the platform of shorter width loses the upper parts of the
170number. There is no good solution for this problem except to avoid
171transferring or storing raw binary numbers.
172
173One can circumnavigate both these problems in two ways: either
174transfer and store numbers always in text format, instead of raw
175binary, or consider using modules like C<Data::Dumper> (included in
176the standard distribution as of Perl 5.005) and C<Storable>.
177
433acd8a 178=head2 Files and Filesystems
e41182b5 179
180Most platforms these days structure files in a hierarchical fashion.
181So, it is reasonably safe to assume that any platform supports the
182notion of a "path" to uniquely identify a file on the system. Just
183how that path is actually written, differs.
184
185While they are similar, file path specifications differ between Unix,
495c5fdc 186Windows, S<Mac OS>, OS/2, VMS, VOS, S<RISC OS> and probably others.
187Unix, for example, is one of the few OSes that has the idea of a single
188root directory.
322422de 189
190VMS, Windows, and OS/2 can work similarly to Unix with C</> as path
191separator, or in their own idiosyncratic ways (such as having several
3c075c7d 192root directories and various "unrooted" device files such NIL: and
322422de 193LPT:).
194
195S<Mac OS> uses C<:> as a path separator instead of C</>.
196
433acd8a 197The filesystem may not support neither hard links (C<link()>) nor
198symbolic links (C<symlink()>, C<readlink()>, C<lstat()>).
199
200The filesystem may not support neither access timestamp nor change
201timestamp (meaning that about the only portable timestamp is the
202modification timestamp), or one second granularity of any timestamps
203(e.g. the FAT filesystem limits the time granularity to two seconds).
204
495c5fdc 205VOS perl can emulate Unix filenames with C</> as path separator. The
206native pathname characters greater-than, less-than, number-sign, and
207percent-sign are always accepted.
208
322422de 209C<RISC OS> perl can emulate Unix filenames with C</> as path
210separator, or go native and use C<.> for path separator and C<:> to
211signal filing systems and disc names.
e41182b5 212
213As with the newline problem above, there are modules that can help. The
214C<File::Spec> modules provide methods to do the Right Thing on whatever
215platform happens to be running the program.
216
217 use File::Spec;
218 chdir(File::Spec->updir()); # go up one directory
219 $file = File::Spec->catfile(
220 File::Spec->curdir(), 'temp', 'file.txt'
221 );
222 # on Unix and Win32, './temp/file.txt'
223 # on Mac OS, ':temp:file.txt'
224
225File::Spec is available in the standard distribution, as of version
2265.004_05.
227
228In general, production code should not have file paths hardcoded; making
229them user supplied or from a configuration file is better, keeping in mind
230that file path syntax varies on different machines.
231
232This is especially noticeable in scripts like Makefiles and test suites,
233which often assume C</> as a path separator for subdirectories.
234
235Also of use is C<File::Basename>, from the standard distribution, which
236splits a pathname into pieces (base filename, full path to directory,
237and file suffix).
238
3c075c7d 239Even when on a single platform (if you can call UNIX a single platform),
240remember not to count on the existence or the contents of
241system-specific files or directories, like F</etc/passwd>,
242F</etc/sendmail.conf>, F</etc/resolv.conf>, or even F</tmp/>. For
243example, F</etc/passwd> may exist but it may not contain the encrypted
244passwords because the system is using some form of enhanced security --
245or it may not contain all the accounts because the system is using NIS.
246If code does need to rely on such a file, include a description of the
247file and its format in the code's documentation, and make it easy for
248the user to override the default location of the file.
249
250Don't assume a text file will end with a newline.
e41182b5 251
dd9f0070 252Do not have two files of the same name with different case, like
3c075c7d 253F<test.pl> and F<Test.pl>, as many platforms have case-insensitive
dd9f0070 254filenames. Also, try not to have non-word characters (except for C<.>)
0a47030a 255in the names, and keep them to the 8.3 convention, for maximum
256portability.
dd9f0070 257
258Likewise, if using C<AutoSplit>, try to keep the split functions to
2598.3 naming and case-insensitive conventions; or, at the very least,
260make it so the resulting files have a unique (case-insensitively)
261first 8 characters.
262
433acd8a 263There certainly can be whitespace in filenames. Many systems (DOS,
264VMS) cannot have more than one C<"."> in their filenames.
265
266Don't assume C<E<gt>> won't be the first character of a filename.
267Always use C<E<lt>> explicitly to open a file for reading.
0a47030a 268
269 open(FILE, "<$existing_file") or die $!;
270
3c075c7d 271Actually, though, if filenames might use strange characters, it is
272safest to open it with C<sysopen> instead of C<open>, which is magic.
273
e41182b5 274
275=head2 System Interaction
276
277Not all platforms provide for the notion of a command line, necessarily.
278These are usually platforms that rely on a Graphical User Interface (GUI)
279for user interaction. So a program requiring command lines might not work
280everywhere. But this is probably for the user of the program to deal
281with.
282
283Some platforms can't delete or rename files that are being held open by
284the system. Remember to C<close> files when you are done with them.
285Don't C<unlink> or C<rename> an open file. Don't C<tie> to or C<open> a
286file that is already tied to or opened; C<untie> or C<close> first.
287
0a47030a 288Don't open the same file more than once at a time for writing, as some
289operating systems put mandatory locks on such files.
290
e41182b5 291Don't count on a specific environment variable existing in C<%ENV>.
0a47030a 292Don't count on C<%ENV> entries being case-sensitive, or even
e41182b5 293case-preserving.
294
0a47030a 295Don't count on signals.
e41182b5 296
297Don't count on filename globbing. Use C<opendir>, C<readdir>, and
298C<closedir> instead.
299
b8099c3d 300Don't count on per-program environment variables, or per-program current
dd9f0070 301directories.
b8099c3d 302
3c075c7d 303Don't count on specific values of C<$!>.
304
e41182b5 305
306=head2 Interprocess Communication (IPC)
307
308In general, don't directly access the system in code that is meant to be
0a47030a 309portable. That means, no C<system>, C<exec>, C<fork>, C<pipe>, C<``>,
310C<qx//>, C<open> with a C<|>, nor any of the other things that makes being
e41182b5 311a Unix perl hacker worth being.
312
313Commands that launch external processes are generally supported on
314most platforms (though many of them do not support any type of forking),
315but the problem with using them arises from what you invoke with them.
316External tools are often named differently on different platforms, often
317not available in the same location, often accept different arguments,
318often behave differently, and often represent their results in a
319platform-dependent way. Thus you should seldom depend on them to produce
320consistent results.
321
322One especially common bit of Perl code is opening a pipe to sendmail:
323
324 open(MAIL, '|/usr/lib/sendmail -t') or die $!;
325
326This is fine for systems programming when sendmail is known to be
327available. But it is not fine for many non-Unix systems, and even
328some Unix systems that may not have sendmail installed. If a portable
329solution is needed, see the C<Mail::Send> and C<Mail::Mailer> modules
330in the C<MailTools> distribution. C<Mail::Mailer> provides several
331mailing methods, including mail, sendmail, and direct SMTP
332(via C<Net::SMTP>) if a mail transfer agent is not available.
333
334The rule of thumb for portable code is: Do it all in portable Perl, or
0a47030a 335use a module (that may internally implement it with platform-specific
336code, but expose a common interface).
e41182b5 337
322422de 338The UNIX System V IPC (C<msg*(), sem*(), shm*()>) is not available
339even in all UNIX platforms.
e41182b5 340
3c075c7d 341
e41182b5 342=head2 External Subroutines (XS)
343
344XS code, in general, can be made to work with any platform; but dependent
345libraries, header files, etc., might not be readily available or
346portable, or the XS code itself might be platform-specific, just as Perl
347code might be. If the libraries and headers are portable, then it is
348normally reasonable to make sure the XS code is portable, too.
349
350There is a different kind of portability issue with writing XS
0a47030a 351code: availability of a C compiler on the end-user's system. C brings
352with it its own portability issues, and writing XS code will expose you to
e41182b5 353some of those. Writing purely in perl is a comparatively easier way to
354achieve portability.
355
356
357=head2 Standard Modules
358
359In general, the standard modules work across platforms. Notable
360exceptions are C<CPAN.pm> (which currently makes connections to external
361programs that may not be available), platform-specific modules (like
362C<ExtUtils::MM_VMS>), and DBM modules.
363
364There is no one DBM module that is available on all platforms.
365C<SDBM_File> and the others are generally available on all Unix and DOSish
0a47030a 366ports, but not in MacPerl, where only C<NBDM_File> and C<DB_File> are
367available.
e41182b5 368
369The good news is that at least some DBM module should be available, and
370C<AnyDBM_File> will use whichever module it can find. Of course, then
371the code needs to be fairly strict, dropping to the lowest common
372denominator (e.g., not exceeding 1K for each record).
373
374
375=head2 Time and Date
376
0a47030a 377The system's notion of time of day and calendar date is controlled in
378widely different ways. Don't assume the timezone is stored in C<$ENV{TZ}>,
379and even if it is, don't assume that you can control the timezone through
380that variable.
e41182b5 381
322422de 382Don't assume that the epoch starts at 00:00:00, January 1, 1970,
383because that is OS-specific. Better to store a date in an unambiguous
384representation. The ISO 8601 standard defines YYYY-MM-DD as the date
385format. A text representation (like C<1 Jan 1970>) can be easily
386converted into an OS-specific value using a module like
387C<Date::Parse>. An array of values, such as those returned by
388C<localtime>, can be converted to an OS-specific representation using
389C<Time::Local>.
390
391
392=head2 Character sets and character encoding
393
394Assume very little about character sets. Do not assume anything about
395the numerical values (C<ord()>, C<chr()>) of characters. Do not
396assume that the alphabetic characters are encoded contiguously (in
3c075c7d 397numerical sense). Do not assume anything about the ordering of the
322422de 398characters. The lowercase letters may come before or after the
399uppercase letters, the lowercase and uppercase may be interlaced so
b1ff3570 400that both 'a' and 'A' come before the 'b', the accented and other
322422de 401international characters may be interlaced so that E<auml> comes
402before the 'b'.
403
404
405=head2 Internationalisation
406
3c075c7d 407If you may assume POSIX (a rather large assumption, that in practice
408means UNIX), you may read more about the POSIX locale system from
322422de 409L<perllocale>. The locale system at least attempts to make things a
3c075c7d 410little bit more portable, or at least more convenient and
322422de 411native-friendly for non-English users. The system affects character
412sets and encoding, and date and time formatting, among other things.
e41182b5 413
414
415=head2 System Resources
416
0a47030a 417If your code is destined for systems with severely constrained (or
418missing!) virtual memory systems then you want to be I<especially> mindful
419of avoiding wasteful constructs such as:
e41182b5 420
421 # NOTE: this is no longer "bad" in perl5.005
422 for (0..10000000) {} # bad
423 for (my $x = 0; $x <= 10000000; ++$x) {} # good
424
425 @lines = <VERY_LARGE_FILE>; # bad
426
427 while (<FILE>) {$file .= $_} # sometimes bad
0a47030a 428 $file = join('', <FILE>); # better
e41182b5 429
430The last two may appear unintuitive to most people. The first of those
431two constructs repeatedly grows a string, while the second allocates a
432large chunk of memory in one go. On some systems, the latter is more
433efficient that the former.
434
0a47030a 435
e41182b5 436=head2 Security
437
0a47030a 438Most multi-user platforms provide basic levels of security that is usually
439felt at the file-system level. Other platforms usually don't
440(unfortunately). Thus the notion of user id, or "home" directory, or even
441the state of being logged-in, may be unrecognizable on many platforms. If
442you write programs that are security conscious, it is usually best to know
443what type of system you will be operating under, and write code explicitly
e41182b5 444for that platform (or class of platforms).
445
0a47030a 446
e41182b5 447=head2 Style
448
449For those times when it is necessary to have platform-specific code,
450consider keeping the platform-specific code in one place, making porting
451to other platforms easier. Use the C<Config> module and the special
0a47030a 452variable C<$^O> to differentiate platforms, as described in
453L<"PLATFORMS">.
e41182b5 454
455
0a47030a 456=head1 CPAN Testers
e41182b5 457
0a47030a 458Modules uploaded to CPAN are tested by a variety of volunteers on
459different platforms. These CPAN testers are notified by mail of each
e41182b5 460new upload, and reply to the list with PASS, FAIL, NA (not applicable to
0a47030a 461this platform), or UNKNOWN (unknown), along with any relevant notations.
e41182b5 462
463The purpose of the testing is twofold: one, to help developers fix any
0a47030a 464problems in their code that crop up because of lack of testing on other
465platforms; two, to provide users with information about whether or not
466a given module works on a given platform.
e41182b5 467
468=over 4
469
470=item Mailing list: cpan-testers@perl.org
471
472=item Testing results: C<http://www.connect.net/gbarr/cpan-test/>
473
474=back
475
476
477=head1 PLATFORMS
478
479As of version 5.002, Perl is built with a C<$^O> variable that
480indicates the operating system it was built on. This was implemented
481to help speed up code that would otherwise have to C<use Config;> and
482use the value of C<$Config{'osname'}>. Of course, to get
483detailed information about the system, looking into C<%Config> is
484certainly recommended.
485
486=head2 Unix
487
488Perl works on a bewildering variety of Unix and Unix-like platforms (see
489e.g. most of the files in the F<hints/> directory in the source code kit).
490On most of these systems, the value of C<$^O> (hence C<$Config{'osname'}>,
491too) is determined by lowercasing and stripping punctuation from the first
0a47030a 492field of the string returned by typing C<uname -a> (or a similar command)
493at the shell prompt. Here, for example, are a few of the more popular
494Unix flavors:
e41182b5 495
f34d0673 496 uname $^O $Config{'archname'}
497 -------------------------------------------
322422de 498 AIX aix aix
499 FreeBSD freebsd freebsd-i386
500 Linux linux i386-linux
501 HP-UX hpux PA-RISC1.1
3c075c7d 502 IRIX irix irix
322422de 503 OSF1 dec_osf alpha-dec_osf
f34d0673 504 SunOS solaris sun4-solaris
505 SunOS solaris i86pc-solaris
322422de 506 SunOS4 sunos sun4-sunos
e41182b5 507
322422de 508Note that because the C<$Config{'archname'}> may depend on the hardware
509architecture it may vary quite a lot, much more than the C<$^O>.
e41182b5 510
511=head2 DOS and Derivatives
512
513Perl has long been ported to PC style microcomputers running under
514systems like PC-DOS, MS-DOS, OS/2, and most Windows platforms you can
515bring yourself to mention (except for Windows CE, if you count that).
516Users familiar with I<COMMAND.COM> and/or I<CMD.EXE> style shells should
517be aware that each of these file specifications may have subtle
518differences:
519
520 $filespec0 = "c:/foo/bar/file.txt";
521 $filespec1 = "c:\\foo\\bar\\file.txt";
522 $filespec2 = 'c:\foo\bar\file.txt';
523 $filespec3 = 'c:\\foo\\bar\\file.txt';
524
525System calls accept either C</> or C<\> as the path separator. However,
526many command-line utilities of DOS vintage treat C</> as the option
527prefix, so they may get confused by filenames containing C</>. Aside
528from calling any external programs, C</> will work just fine, and
529probably better, as it is more consistent with popular usage, and avoids
530the problem of remembering what to backwhack and what not to.
531
0a47030a 532The DOS FAT filesystem can only accommodate "8.3" style filenames. Under
e41182b5 533the "case insensitive, but case preserving" HPFS (OS/2) and NTFS (NT)
0a47030a 534filesystems you may have to be careful about case returned with functions
e41182b5 535like C<readdir> or used with functions like C<open> or C<opendir>.
536
537DOS also treats several filenames as special, such as AUX, PRN, NUL, CON,
538COM1, LPT1, LPT2 etc. Unfortunately these filenames won't even work
539if you include an explicit directory prefix, in some cases. It is best
540to avoid such filenames, if you want your code to be portable to DOS
541and its derivatives.
542
543Users of these operating systems may also wish to make use of
544scripts such as I<pl2bat.bat> or I<pl2cmd> as appropriate to
545put wrappers around your scripts.
546
547Newline (C<\n>) is translated as C<\015\012> by STDIO when reading from
548and writing to files. C<binmode(FILEHANDLE)> will keep C<\n> translated
549as C<\012> for that filehandle. Since it is a noop on other systems,
550C<binmode> should be used for cross-platform code that deals with binary
551data.
552
553The C<$^O> variable and the C<$Config{'archname'}> values for various
554DOSish perls are as follows:
555
556 OS $^O $Config{'archname'}
557 --------------------------------------------
558 MS-DOS dos
559 PC-DOS dos
560 OS/2 os2
561 Windows 95 MSWin32 MSWin32-x86
562 Windows NT MSWin32 MSWin32-x86
563 Windows NT MSWin32 MSWin32-alpha
564 Windows NT MSWin32 MSWin32-ppc
565
566Also see:
567
568=over 4
569
570=item The djgpp environment for DOS, C<http://www.delorie.com/djgpp/>
571
572=item The EMX environment for DOS, OS/2, etc. C<emx@iaehv.nl>,
573C<http://www.juge.com/bbs/Hobb.19.html>
574
575=item Build instructions for Win32, L<perlwin32>.
576
577=item The ActiveState Pages, C<http://www.activestate.com/>
578
579=back
580
581
dd9f0070 582=head2 S<Mac OS>
e41182b5 583
584Any module requiring XS compilation is right out for most people, because
585MacPerl is built using non-free (and non-cheap!) compilers. Some XS
586modules that can work with MacPerl are built and distributed in binary
0a47030a 587form on CPAN. See I<MacPerl: Power and Ease> and L<"CPAN Testers">
588for more details.
e41182b5 589
590Directories are specified as:
591
592 volume:folder:file for absolute pathnames
593 volume:folder: for absolute pathnames
594 :folder:file for relative pathnames
595 :folder: for relative pathnames
596 :file for relative pathnames
597 file for relative pathnames
598
599Files in a directory are stored in alphabetical order. Filenames are
600limited to 31 characters, and may include any character except C<:>,
601which is reserved as a path separator.
602
0a47030a 603Instead of C<flock>, see C<FSpSetFLock> and C<FSpRstFLock> in the
3c075c7d 604C<Mac::Files> module, or C<chmod(0444, ...)> and C<chmod(0666, ...)>.
e41182b5 605
606In the MacPerl application, you can't run a program from the command line;
607programs that expect C<@ARGV> to be populated can be edited with something
608like the following, which brings up a dialog box asking for the command
609line arguments.
610
611 if (!@ARGV) {
612 @ARGV = split /\s+/, MacPerl::Ask('Arguments?');
613 }
614
615A MacPerl script saved as a droplet will populate C<@ARGV> with the full
616pathnames of the files dropped onto the script.
617
618Mac users can use programs on a kind of command line under MPW (Macintosh
619Programmer's Workshop, a free development environment from Apple).
620MacPerl was first introduced as an MPW tool, and MPW can be used like a
621shell:
622
623 perl myscript.plx some arguments
624
625ToolServer is another app from Apple that provides access to MPW tools
0a47030a 626from MPW and the MacPerl app, which allows MacPerl programs to use
e41182b5 627C<system>, backticks, and piped C<open>.
628
629"S<Mac OS>" is the proper name for the operating system, but the value
630in C<$^O> is "MacOS". To determine architecture, version, or whether
631the application or MPW tool version is running, check:
632
633 $is_app = $MacPerl::Version =~ /App/;
634 $is_tool = $MacPerl::Version =~ /MPW/;
635 ($version) = $MacPerl::Version =~ /^(\S+)/;
636 $is_ppc = $MacPerl::Architecture eq 'MacPPC';
637 $is_68k = $MacPerl::Architecture eq 'Mac68K';
638
3c075c7d 639S<Mac OS X>, to be based on NeXT's OpenStep OS, will (in theory) be able
640to run MacPerl natively, but Unix perl will also run natively under the
641built-in Unix environment.
e41182b5 642
643Also see:
644
645=over 4
646
647=item The MacPerl Pages, C<http://www.ptf.com/macperl/>.
648
649=item The MacPerl mailing list, C<mac-perl-request@iis.ee.ethz.ch>.
650
651=back
652
653
654=head2 VMS
655
656Perl on VMS is discussed in F<vms/perlvms.pod> in the perl distribution.
0a47030a 657Note that perl on VMS can accept either VMS- or Unix-style file
e41182b5 658specifications as in either of the following:
659
660 $ perl -ne "print if /perl_setup/i" SYS$LOGIN:LOGIN.COM
661 $ perl -ne "print if /perl_setup/i" /sys$login/login.com
662
663but not a mixture of both as in:
664
665 $ perl -ne "print if /perl_setup/i" sys$login:/login.com
666 Can't open sys$login:/login.com: file specification syntax error
667
668Interacting with Perl from the Digital Command Language (DCL) shell
669often requires a different set of quotation marks than Unix shells do.
670For example:
671
672 $ perl -e "print ""Hello, world.\n"""
673 Hello, world.
674
675There are a number of ways to wrap your perl scripts in DCL .COM files if
676you are so inclined. For example:
677
678 $ write sys$output "Hello from DCL!"
679 $ if p1 .eqs. ""
680 $ then perl -x 'f$environment("PROCEDURE")
681 $ else perl -x - 'p1 'p2 'p3 'p4 'p5 'p6 'p7 'p8
682 $ deck/dollars="__END__"
683 #!/usr/bin/perl
684
685 print "Hello from Perl!\n";
686
687 __END__
688 $ endif
689
690Do take care with C<$ ASSIGN/nolog/user SYS$COMMAND: SYS$INPUT> if your
691perl-in-DCL script expects to do things like C<$read = E<lt>STDINE<gt>;>.
692
693Filenames are in the format "name.extension;version". The maximum
694length for filenames is 39 characters, and the maximum length for
695extensions is also 39 characters. Version is a number from 1 to
69632767. Valid characters are C</[A-Z0-9$_-]/>.
697
698VMS' RMS filesystem is case insensitive and does not preserve case.
699C<readdir> returns lowercased filenames, but specifying a file for
b8099c3d 700opening remains case insensitive. Files without extensions have a
e41182b5 701trailing period on them, so doing a C<readdir> with a file named F<A.;5>
0a47030a 702will return F<a.> (though that file could be opened with
703C<open(FH, 'A')>).
e41182b5 704
f34d0673 705RMS had an eight level limit on directory depths from any rooted logical
dd9f0070 706(allowing 16 levels overall) prior to VMS 7.2. Hence
707C<PERL_ROOT:[LIB.2.3.4.5.6.7.8]> is a valid directory specification but
708C<PERL_ROOT:[LIB.2.3.4.5.6.7.8.9]> is not. F<Makefile.PL> authors might
709have to take this into account, but at least they can refer to the former
f34d0673 710as C</PERL_ROOT/lib/2/3/4/5/6/7/8/>.
e41182b5 711
0a47030a 712The C<VMS::Filespec> module, which gets installed as part of the build
713process on VMS, is a pure Perl module that can easily be installed on
714non-VMS platforms and can be helpful for conversions to and from RMS
715native formats.
e41182b5 716
717What C<\n> represents depends on the type of file that is open. It could
718be C<\015>, C<\012>, C<\015\012>, or nothing. Reading from a file
719translates newlines to C<\012>, unless C<binmode> was executed on that
720handle, just like DOSish perls.
721
722TCP/IP stacks are optional on VMS, so socket routines might not be
723implemented. UDP sockets may not be supported.
724
725The value of C<$^O> on OpenVMS is "VMS". To determine the architecture
726that you are running on without resorting to loading all of C<%Config>
727you can examine the content of the C<@INC> array like so:
728
729 if (grep(/VMS_AXP/, @INC)) {
730 print "I'm on Alpha!\n";
731 } elsif (grep(/VMS_VAX/, @INC)) {
732 print "I'm on VAX!\n";
733 } else {
734 print "I'm not so sure about where $^O is...\n";
735 }
736
737Also see:
738
739=over 4
740
741=item L<perlvms.pod>
742
743=item vmsperl list, C<vmsperl-request@newman.upenn.edu>
744
745Put words C<SUBSCRIBE VMSPERL> in message body.
746
747=item vmsperl on the web, C<http://www.sidhe.org/vmsperl/index.html>
748
749=back
750
751
495c5fdc 752=head2 VOS
753
754Perl on VOS is discussed in F<README.vos> in the perl distribution.
755Note that perl on VOS can accept either VOS- or Unix-style file
756specifications as in either of the following:
757
758 $ perl -ne "print if /perl_setup/i" >system>notices
759 $ perl -ne "print if /perl_setup/i" /system/notices
760
761or even a mixture of both as in:
762
763 $ perl -ne "print if /perl_setup/i" >system/notices
764
765Note that even though VOS allows the slash character to appear in object
766names, because the VOS port of Perl interprets it as a pathname
767delimiting character, VOS files, directories, or links whose names
768contain a slash character cannot be processed. Such files must be
769renamed before they can be processed by Perl.
770
771The following C functions are unimplemented on VOS, any any attempt by
772Perl to use them will result in a fatal error message and an immediate
773exit from Perl: dup, do_aspawn, do_spawn, execlp, execl, execvp, fork,
774waitpid. Once these functions become available in the VOS POSIX.1
775implementation, you can either recompile and rebind Perl, or you can
776download a newer port from ftp.stratus.com.
777
778The value of C<$^O> on VOS is "VOS". To determine the architecture that
779you are running on without resorting to loading all of C<%Config> you
780can examine the content of the C<@INC> array like so:
781
782 if (grep(/VOS/, @INC)) {
783 print "I'm on a Stratus box!\n";
784 } else {
785 print "I'm not on a Stratus box!\n";
786 die;
787 }
788
789 if (grep(/860/, @INC)) {
790 print "This box is a Stratus XA/R!\n";
791 } elsif (grep(/7100/, @INC)) {
792 print "This box is a Stratus HP 7100 or 8000!\n";
793 } elsif (grep(/8000/, @INC)) {
794 print "This box is a Stratus HP 8000!\n";
795 } else {
796 print "This box is a Stratus 68K...\n";
797 }
798
799Also see:
800
801=over 4
802
803=item L<README.vos>
804
805=item VOS mailing list
806
807There is no specific mailing list for Perl on VOS. You can post
808comments to the comp.sys.stratus newsgroup, or subscribe to the general
809Stratus mailing list. Send a letter with "Subscribe Info-Stratus" in
810the message body to majordomo@list.stratagy.com.
811
812=item VOS Perl on the web at C<http://ftp.stratus.com/pub/vos/vos.html>
813
814=back
815
816
e41182b5 817=head2 EBCDIC Platforms
818
819Recent versions of Perl have been ported to platforms such as OS/400 on
7c5ffed3 820AS/400 minicomputers as well as OS/390 & VM/ESA for IBM Mainframes. Such
821computers use EBCDIC character sets internally (usually Character Code
822Set ID 00819 for OS/400 and IBM-1047 for OS/390 & VM/ESA). Note that on
823the mainframe perl currently works under the "Unix system services
824for OS/390" (formerly known as OpenEdition) and VM/ESA OpenEdition.
e41182b5 825
7c5ffed3 826As of R2.5 of USS for OS/390 and Version 2.3 of VM/ESA these Unix
827sub-systems do not support the C<#!> shebang trick for script invocation.
828Hence, on OS/390 and VM/ESA perl scripts can be executed with a header
829similar to the following simple script:
e41182b5 830
831 : # use perl
832 eval 'exec /usr/local/bin/perl -S $0 ${1+"$@"}'
833 if 0;
834 #!/usr/local/bin/perl # just a comment really
835
836 print "Hello from perl!\n";
837
838On these platforms, bear in mind that the EBCDIC character set may have
0a47030a 839an effect on what happens with some perl functions (such as C<chr>,
840C<pack>, C<print>, C<printf>, C<ord>, C<sort>, C<sprintf>, C<unpack>), as
841well as bit-fiddling with ASCII constants using operators like C<^>, C<&>
842and C<|>, not to mention dealing with socket interfaces to ASCII computers
433acd8a 843(see L<"NEWLINES">).
e41182b5 844
845Fortunately, most web servers for the mainframe will correctly translate
846the C<\n> in the following statement to its ASCII equivalent (note that
7c5ffed3 847C<\r> is the same under both Unix and OS/390 & VM/ESA):
e41182b5 848
849 print "Content-type: text/html\r\n\r\n";
850
851The value of C<$^O> on OS/390 is "os390".
852
7c5ffed3 853The value of C<$^O> on VM/ESA is "vmesa".
3c075c7d 854
e41182b5 855Some simple tricks for determining if you are running on an EBCDIC
856platform could include any of the following (perhaps all):
857
858 if ("\t" eq "\05") { print "EBCDIC may be spoken here!\n"; }
859
860 if (ord('A') == 193) { print "EBCDIC may be spoken here!\n"; }
861
862 if (chr(169) eq 'z') { print "EBCDIC may be spoken here!\n"; }
863
864Note that one thing you may not want to rely on is the EBCDIC encoding
0a47030a 865of punctuation characters since these may differ from code page to code
866page (and once your module or script is rumoured to work with EBCDIC,
867folks will want it to work with all EBCDIC character sets).
e41182b5 868
869Also see:
870
871=over 4
872
873=item perl-mvs list
874
875The perl-mvs@perl.org list is for discussion of porting issues as well as
876general usage issues for all EBCDIC Perls. Send a message body of
877"subscribe perl-mvs" to majordomo@perl.org.
878
0a47030a 879=item AS/400 Perl information at C<http://as400.rochester.ibm.com/>
e41182b5 880
881=back
882
b8099c3d 883
884=head2 Acorn RISC OS
885
0a47030a 886As Acorns use ASCII with newlines (C<\n>) in text files as C<\012> like
887Unix and Unix filename emulation is turned on by default, it is quite
888likely that most simple scripts will work "out of the box". The native
889filing system is modular, and individual filing systems are free to be
890case-sensitive or insensitive, and are usually case-preserving. Some
891native filing systems have name length limits which file and directory
892names are silently truncated to fit - scripts should be aware that the
893standard disc filing system currently has a name length limit of B<10>
894characters, with up to 77 items in a directory, but other filing systems
895may not impose such limitations.
b8099c3d 896
897Native filenames are of the form
898
899 Filesystem#Special_Field::DiscName.$.Directory.Directory.File
dd9f0070 900
b8099c3d 901where
902
903 Special_Field is not usually present, but may contain . and $ .
904 Filesystem =~ m|[A-Za-z0-9_]|
905 DsicName =~ m|[A-Za-z0-9_/]|
906 $ represents the root directory
907 . is the path separator
908 @ is the current directory (per filesystem but machine global)
909 ^ is the parent directory
910 Directory and File =~ m|[^\0- "\.\$\%\&:\@\\^\|\177]+|
911
912The default filename translation is roughly C<tr|/.|./|;>
913
914Note that C<"ADFS::HardDisc.$.File" ne 'ADFS::HardDisc.$.File'> and that
0a47030a 915the second stage of C<$> interpolation in regular expressions will fall
916foul of the C<$.> if scripts are not careful.
917
918Logical paths specified by system variables containing comma-separated
919search lists are also allowed, hence C<System:Modules> is a valid
920filename, and the filesystem will prefix C<Modules> with each section of
921C<System$Path> until a name is made that points to an object on disc.
922Writing to a new file C<System:Modules> would only be allowed if
923C<System$Path> contains a single item list. The filesystem will also
924expand system variables in filenames if enclosed in angle brackets, so
925C<E<lt>System$DirE<gt>.Modules> would look for the file
926S<C<$ENV{'System$Dir'} . 'Modules'>>. The obvious implication of this is
3c075c7d 927that B<fully qualified filenames can start with C<E<lt>E<gt>>> and should
0a47030a 928be protected when C<open> is used for input.
b8099c3d 929
930Because C<.> was in use as a directory separator and filenames could not
931be assumed to be unique after 10 characters, Acorn implemented the C
932compiler to strip the trailing C<.c> C<.h> C<.s> and C<.o> suffix from
933filenames specified in source code and store the respective files in
934subdirectories named after the suffix. Hence files are translated:
935
936 foo.h h.foo
937 C:foo.h C:h.foo (logical path variable)
938 sys/os.h sys.h.os (C compiler groks Unix-speak)
939 10charname.c c.10charname
940 10charname.o o.10charname
941 11charname_.c c.11charname (assuming filesystem truncates at 10)
942
943The Unix emulation library's translation of filenames to native assumes
0a47030a 944that this sort of translation is required, and allows a user defined list
945of known suffixes which it will transpose in this fashion. This may
946appear transparent, but consider that with these rules C<foo/bar/baz.h>
947and C<foo/bar/h/baz> both map to C<foo.bar.h.baz>, and that C<readdir> and
948C<glob> cannot and do not attempt to emulate the reverse mapping. Other
949C<.>s in filenames are translated to C</>.
950
951As implied above the environment accessed through C<%ENV> is global, and
952the convention is that program specific environment variables are of the
953form C<Program$Name>. Each filing system maintains a current directory,
954and the current filing system's current directory is the B<global> current
955directory. Consequently, sociable scripts don't change the current
956directory but rely on full pathnames, and scripts (and Makefiles) cannot
957assume that they can spawn a child process which can change the current
958directory without affecting its parent (and everyone else for that
959matter).
960
961As native operating system filehandles are global and currently are
962allocated down from 255, with 0 being a reserved value the Unix emulation
963library emulates Unix filehandles. Consequently, you can't rely on
964passing C<STDIN>, C<STDOUT>, or C<STDERR> to your children.
965
966The desire of users to express filenames of the form
967C<E<lt>Foo$DirE<gt>.Bar> on the command line unquoted causes problems,
968too: C<``> command output capture has to perform a guessing game. It
969assumes that a string C<E<lt>[^E<lt>E<gt>]+\$[^E<lt>E<gt>]E<gt>> is a
970reference to an environment variable, whereas anything else involving
971C<E<lt>> or C<E<gt>> is redirection, and generally manages to be 99%
972right. Of course, the problem remains that scripts cannot rely on any
973Unix tools being available, or that any tools found have Unix-like command
974line arguments.
975
976Extensions and XS are, in theory, buildable by anyone using free tools.
977In practice, many don't, as users of the Acorn platform are used to binary
978distribution. MakeMaker does run, but no available make currently copes
979with MakeMaker's makefiles; even if/when this is fixed, the lack of a
980Unix-like shell can cause problems with makefile rules, especially lines
981of the form C<cd sdbm && make all>, and anything using quoting.
b8099c3d 982
983"S<RISC OS>" is the proper name for the operating system, but the value
984in C<$^O> is "riscos" (because we don't like shouting).
985
986Also see:
987
988=over 4
989
990=item perl list
991
992=back
993
994
e41182b5 995=head2 Other perls
996
b8099c3d 997Perl has been ported to a variety of platforms that do not fit into any of
998the above categories. Some, such as AmigaOS, BeOS, QNX, and Plan 9, have
0a47030a 999been well-integrated into the standard Perl source code kit. You may need
b8099c3d 1000to see the F<ports/> directory on CPAN for information, and possibly
0a47030a 1001binaries, for the likes of: aos, atari, lynxos, riscos, Tandem Guardian,
1002vos, I<etc.> (yes we know that some of these OSes may fall under the Unix
1003category, but we are not a standards body.)
e41182b5 1004
1005See also:
1006
1007=over 4
1008
1009=item Atari, Guido Flohr's page C<http://stud.uni-sb.de/~gufl0000/>
1010
1011=item HP 300 MPE/iX C<http://www.cccd.edu/~markb/perlix.html>
1012
1013=item Novell Netware
1014
0a47030a 1015A free perl5-based PERL.NLM for Novell Netware is available from
e41182b5 1016C<http://www.novell.com/>
1017
1018=back
1019
1020
1021=head1 FUNCTION IMPLEMENTATIONS
1022
1023Listed below are functions unimplemented or implemented differently on
1024various platforms. Following each description will be, in parentheses, a
1025list of platforms that the description applies to.
1026
1027The list may very well be incomplete, or wrong in some places. When in
1028doubt, consult the platform-specific README files in the Perl source
1029distribution, and other documentation resources for a given port.
1030
0a47030a 1031Be aware, moreover, that even among Unix-ish systems there are variations.
e41182b5 1032
1033For many functions, you can also query C<%Config>, exported by default
1034from C<Config.pm>. For example, to check if the platform has the C<lstat>
0a47030a 1035call, check C<$Config{'d_lstat'}>. See L<Config.pm> for a full
1036description of available variables.
e41182b5 1037
1038
1039=head2 Alphabetical Listing of Perl Functions
1040
1041=over 8
1042
1043=item -X FILEHANDLE
1044
1045=item -X EXPR
1046
1047=item -X
1048
1049C<-r>, C<-w>, and C<-x> have only a very limited meaning; directories
1050and applications are executable, and there are no uid/gid
1051considerations. C<-o> is not supported. (S<Mac OS>)
1052
1053C<-r>, C<-w>, C<-x>, and C<-o> tell whether or not file is accessible,
1054which may not reflect UIC-based file protections. (VMS)
1055
b8099c3d 1056C<-s> returns the size of the data fork, not the total size of data fork
1057plus resource fork. (S<Mac OS>).
1058
1059C<-s> by name on an open file will return the space reserved on disk,
1060rather than the current extent. C<-s> on an open filehandle returns the
1061current size. (S<RISC OS>)
1062
e41182b5 1063C<-R>, C<-W>, C<-X>, C<-O> are indistinguishable from C<-r>, C<-w>,
b8099c3d 1064C<-x>, C<-o>. (S<Mac OS>, Win32, VMS, S<RISC OS>)
e41182b5 1065
1066C<-b>, C<-c>, C<-k>, C<-g>, C<-p>, C<-u>, C<-A> are not implemented.
1067(S<Mac OS>)
1068
1069C<-g>, C<-k>, C<-l>, C<-p>, C<-u>, C<-A> are not particularly meaningful.
b8099c3d 1070(Win32, VMS, S<RISC OS>)
e41182b5 1071
1072C<-d> is true if passed a device spec without an explicit directory.
1073(VMS)
1074
1075C<-T> and C<-B> are implemented, but might misclassify Mac text files
0a47030a 1076with foreign characters; this is the case will all platforms, but may
1077affect S<Mac OS> often. (S<Mac OS>)
e41182b5 1078
1079C<-x> (or C<-X>) determine if a file ends in one of the executable
1080suffixes. C<-S> is meaningless. (Win32)
1081
b8099c3d 1082C<-x> (or C<-X>) determine if a file has an executable file type.
1083(S<RISC OS>)
1084
e41182b5 1085=item binmode FILEHANDLE
1086
b8099c3d 1087Meaningless. (S<Mac OS>, S<RISC OS>)
e41182b5 1088
1089Reopens file and restores pointer; if function fails, underlying
1090filehandle may be closed, or pointer may be in a different position.
1091(VMS)
1092
1093The value returned by C<tell> may be affected after the call, and
1094the filehandle may be flushed. (Win32)
1095
1096=item chmod LIST
1097
1098Only limited meaning. Disabling/enabling write permission is mapped to
1099locking/unlocking the file. (S<Mac OS>)
1100
1101Only good for changing "owner" read-write access, "group", and "other"
1102bits are meaningless. (Win32)
1103
b8099c3d 1104Only good for changing "owner" and "other" read-write access. (S<RISC OS>)
1105
495c5fdc 1106Access permissions are mapped onto VOS access-control list changes. (VOS)
1107
e41182b5 1108=item chown LIST
1109
495c5fdc 1110Not implemented. (S<Mac OS>, Win32, Plan9, S<RISC OS>, VOS)
e41182b5 1111
1112Does nothing, but won't fail. (Win32)
1113
1114=item chroot FILENAME
1115
1116=item chroot
1117
7c5ffed3 1118Not implemented. (S<Mac OS>, Win32, VMS, Plan9, S<RISC OS>, VOS, VM/ESA)
e41182b5 1119
1120=item crypt PLAINTEXT,SALT
1121
1122May not be available if library or source was not provided when building
b8099c3d 1123perl. (Win32)
e41182b5 1124
495c5fdc 1125Not implemented. (VOS)
1126
e41182b5 1127=item dbmclose HASH
1128
495c5fdc 1129Not implemented. (VMS, Plan9, VOS)
e41182b5 1130
1131=item dbmopen HASH,DBNAME,MODE
1132
495c5fdc 1133Not implemented. (VMS, Plan9, VOS)
e41182b5 1134
1135=item dump LABEL
1136
b8099c3d 1137Not useful. (S<Mac OS>, S<RISC OS>)
e41182b5 1138
1139Not implemented. (Win32)
1140
b8099c3d 1141Invokes VMS debugger. (VMS)
e41182b5 1142
1143=item exec LIST
1144
1145Not implemented. (S<Mac OS>)
1146
7c5ffed3 1147Implemented via Spawn. (VM/ESA)
3c075c7d 1148
e41182b5 1149=item fcntl FILEHANDLE,FUNCTION,SCALAR
1150
1151Not implemented. (Win32, VMS)
1152
1153=item flock FILEHANDLE,OPERATION
1154
495c5fdc 1155Not implemented (S<Mac OS>, VMS, S<RISC OS>, VOS).
e41182b5 1156
1157Available only on Windows NT (not on Windows 95). (Win32)
1158
1159=item fork
1160
7c5ffed3 1161Not implemented. (S<Mac OS>, Win32, AmigaOS, S<RISC OS>, VOS, VM/ESA)
e41182b5 1162
1163=item getlogin
1164
b8099c3d 1165Not implemented. (S<Mac OS>, S<RISC OS>)
e41182b5 1166
1167=item getpgrp PID
1168
495c5fdc 1169Not implemented. (S<Mac OS>, Win32, VMS, S<RISC OS>, VOS)
e41182b5 1170
1171=item getppid
1172
b8099c3d 1173Not implemented. (S<Mac OS>, Win32, VMS, S<RISC OS>)
e41182b5 1174
1175=item getpriority WHICH,WHO
1176
7c5ffed3 1177Not implemented. (S<Mac OS>, Win32, VMS, S<RISC OS>, VOS, VM/ESA)
e41182b5 1178
1179=item getpwnam NAME
1180
1181Not implemented. (S<Mac OS>, Win32)
1182
b8099c3d 1183Not useful. (S<RISC OS>)
1184
e41182b5 1185=item getgrnam NAME
1186
b8099c3d 1187Not implemented. (S<Mac OS>, Win32, VMS, S<RISC OS>)
e41182b5 1188
1189=item getnetbyname NAME
1190
1191Not implemented. (S<Mac OS>, Win32, Plan9)
1192
1193=item getpwuid UID
1194
1195Not implemented. (S<Mac OS>, Win32)
1196
b8099c3d 1197Not useful. (S<RISC OS>)
1198
e41182b5 1199=item getgrgid GID
1200
b8099c3d 1201Not implemented. (S<Mac OS>, Win32, VMS, S<RISC OS>)
e41182b5 1202
1203=item getnetbyaddr ADDR,ADDRTYPE
1204
1205Not implemented. (S<Mac OS>, Win32, Plan9)
1206
1207=item getprotobynumber NUMBER
1208
1209Not implemented. (S<Mac OS>)
1210
1211=item getservbyport PORT,PROTO
1212
1213Not implemented. (S<Mac OS>)
1214
1215=item getpwent
1216
7c5ffed3 1217Not implemented. (S<Mac OS>, Win32, VM/ESA)
e41182b5 1218
1219=item getgrent
1220
7c5ffed3 1221Not implemented. (S<Mac OS>, Win32, VMS, VM/ESA)
e41182b5 1222
1223=item gethostent
1224
1225Not implemented. (S<Mac OS>, Win32)
1226
1227=item getnetent
1228
1229Not implemented. (S<Mac OS>, Win32, Plan9)
1230
1231=item getprotoent
1232
1233Not implemented. (S<Mac OS>, Win32, Plan9)
1234
1235=item getservent
1236
1237Not implemented. (Win32, Plan9)
1238
1239=item setpwent
1240
b8099c3d 1241Not implemented. (S<Mac OS>, Win32, S<RISC OS>)
e41182b5 1242
1243=item setgrent
1244
b8099c3d 1245Not implemented. (S<Mac OS>, Win32, VMS, S<RISC OS>)
e41182b5 1246
1247=item sethostent STAYOPEN
1248
b8099c3d 1249Not implemented. (S<Mac OS>, Win32, Plan9, S<RISC OS>)
e41182b5 1250
1251=item setnetent STAYOPEN
1252
b8099c3d 1253Not implemented. (S<Mac OS>, Win32, Plan9, S<RISC OS>)
e41182b5 1254
1255=item setprotoent STAYOPEN
1256
b8099c3d 1257Not implemented. (S<Mac OS>, Win32, Plan9, S<RISC OS>)
e41182b5 1258
1259=item setservent STAYOPEN
1260
b8099c3d 1261Not implemented. (Plan9, Win32, S<RISC OS>)
e41182b5 1262
1263=item endpwent
1264
7c5ffed3 1265Not implemented. (S<Mac OS>, Win32, VM/ESA)
e41182b5 1266
1267=item endgrent
1268
7c5ffed3 1269Not implemented. (S<Mac OS>, Win32, VMS, S<RISC OS>, VM/ESA)
e41182b5 1270
1271=item endhostent
1272
1273Not implemented. (S<Mac OS>, Win32)
1274
1275=item endnetent
1276
1277Not implemented. (S<Mac OS>, Win32, Plan9)
1278
1279=item endprotoent
1280
1281Not implemented. (S<Mac OS>, Win32, Plan9)
1282
1283=item endservent
1284
1285Not implemented. (Plan9, Win32)
1286
1287=item getsockopt SOCKET,LEVEL,OPTNAME
1288
1289Not implemented. (S<Mac OS>, Plan9)
1290
1291=item glob EXPR
1292
1293=item glob
1294
1295Globbing built-in, but only C<*> and C<?> metacharacters are supported.
1296(S<Mac OS>)
1297
0a47030a 1298Features depend on external perlglob.exe or perlglob.bat. May be
1299overridden with something like File::DosGlob, which is recommended.
1300(Win32)
e41182b5 1301
b8099c3d 1302Globbing built-in, but only C<*> and C<?> metacharacters are supported.
0a47030a 1303Globbing relies on operating system calls, which may return filenames
1304in any order. As most filesystems are case-insensitive, even "sorted"
1305filenames will not be in case-sensitive order. (S<RISC OS>)
b8099c3d 1306
e41182b5 1307=item ioctl FILEHANDLE,FUNCTION,SCALAR
1308
1309Not implemented. (VMS)
1310
1311Available only for socket handles, and it does what the ioctlsocket() call
1312in the Winsock API does. (Win32)
1313
b8099c3d 1314Available only for socket handles. (S<RISC OS>)
1315
e41182b5 1316=item kill LIST
1317
0a47030a 1318Not implemented, hence not useful for taint checking. (S<Mac OS>,
1319S<RISC OS>)
e41182b5 1320
0a47030a 1321Available only for process handles returned by the C<system(1, ...)>
1322method of spawning a process. (Win32)
e41182b5 1323
1324=item link OLDFILE,NEWFILE
1325
b8099c3d 1326Not implemented. (S<Mac OS>, Win32, VMS, S<RISC OS>)
e41182b5 1327
433acd8a 1328Link count not updated because hard links are not quite that hard
1329(They are sort of half-way between hard and soft links). (AmigaOS)
1330
e41182b5 1331=item lstat FILEHANDLE
1332
1333=item lstat EXPR
1334
1335=item lstat
1336
b8099c3d 1337Not implemented. (VMS, S<RISC OS>)
e41182b5 1338
b8099c3d 1339Return values may be bogus. (Win32)
e41182b5 1340
1341=item msgctl ID,CMD,ARG
1342
1343=item msgget KEY,FLAGS
1344
1345=item msgsnd ID,MSG,FLAGS
1346
1347=item msgrcv ID,VAR,SIZE,TYPE,FLAGS
1348
495c5fdc 1349Not implemented. (S<Mac OS>, Win32, VMS, Plan9, S<RISC OS>, VOS)
e41182b5 1350
1351=item open FILEHANDLE,EXPR
1352
1353=item open FILEHANDLE
1354
1355The C<|> variants are only supported if ToolServer is installed.
1356(S<Mac OS>)
1357
b8099c3d 1358open to C<|-> and C<-|> are unsupported. (S<Mac OS>, Win32, S<RISC OS>)
e41182b5 1359
1360=item pipe READHANDLE,WRITEHANDLE
1361
1362Not implemented. (S<Mac OS>)
1363
433acd8a 1364Very limited functionality. (MiNT)
1365
e41182b5 1366=item readlink EXPR
1367
1368=item readlink
1369
b8099c3d 1370Not implemented. (Win32, VMS, S<RISC OS>)
e41182b5 1371
1372=item select RBITS,WBITS,EBITS,TIMEOUT
1373
1374Only implemented on sockets. (Win32)
1375
b8099c3d 1376Only reliable on sockets. (S<RISC OS>)
1377
e41182b5 1378=item semctl ID,SEMNUM,CMD,ARG
1379
1380=item semget KEY,NSEMS,FLAGS
1381
1382=item semop KEY,OPSTRING
1383
495c5fdc 1384Not implemented. (S<Mac OS>, Win32, VMS, S<RISC OS>, VOS)
e41182b5 1385
1386=item setpgrp PID,PGRP
1387
495c5fdc 1388Not implemented. (S<Mac OS>, Win32, VMS, S<RISC OS>, VOS)
e41182b5 1389
1390=item setpriority WHICH,WHO,PRIORITY
1391
495c5fdc 1392Not implemented. (S<Mac OS>, Win32, VMS, S<RISC OS>, VOS)
e41182b5 1393
1394=item setsockopt SOCKET,LEVEL,OPTNAME,OPTVAL
1395
1396Not implemented. (S<Mac OS>, Plan9)
1397
1398=item shmctl ID,CMD,ARG
1399
1400=item shmget KEY,SIZE,FLAGS
1401
1402=item shmread ID,VAR,POS,SIZE
1403
1404=item shmwrite ID,STRING,POS,SIZE
1405
495c5fdc 1406Not implemented. (S<Mac OS>, Win32, VMS, S<RISC OS>, VOS)
e41182b5 1407
1408=item socketpair SOCKET1,SOCKET2,DOMAIN,TYPE,PROTOCOL
1409
7c5ffed3 1410Not implemented. (S<Mac OS>, Win32, VMS, S<RISC OS>, VOS, VM/ESA)
e41182b5 1411
1412=item stat FILEHANDLE
1413
1414=item stat EXPR
1415
1416=item stat
1417
1418mtime and atime are the same thing, and ctime is creation time instead of
1419inode change time. (S<Mac OS>)
1420
1421device and inode are not meaningful. (Win32)
1422
1423device and inode are not necessarily reliable. (VMS)
1424
b8099c3d 1425mtime, atime and ctime all return the last modification time. Device and
1426inode are not necessarily reliable. (S<RISC OS>)
1427
e41182b5 1428=item symlink OLDFILE,NEWFILE
1429
b8099c3d 1430Not implemented. (Win32, VMS, S<RISC OS>)
e41182b5 1431
1432=item syscall LIST
1433
7c5ffed3 1434Not implemented. (S<Mac OS>, Win32, VMS, S<RISC OS>, VOS, VM/ESA)
e41182b5 1435
f34d0673 1436=item sysopen FILEHANDLE,FILENAME,MODE,PERMS
1437
dd9f0070 1438The traditional "0", "1", and "2" MODEs are implemented with different
322422de 1439numeric values on some systems. The flags exported by C<Fcntl>
1440(O_RDONLY, O_WRONLY, O_RDWR) should work everywhere though. (S<Mac
7c5ffed3 1441OS>, OS/390, VM/ESA)
f34d0673 1442
e41182b5 1443=item system LIST
1444
1445Only implemented if ToolServer is installed. (S<Mac OS>)
1446
1447As an optimization, may not call the command shell specified in
1448C<$ENV{PERL5SHELL}>. C<system(1, @args)> spawns an external
1449process and immediately returns its process designator, without
1450waiting for it to terminate. Return value may be used subsequently
1451in C<wait> or C<waitpid>. (Win32)
1452
b8099c3d 1453There is no shell to process metacharacters, and the native standard is
1454to pass a command line terminated by "\n" "\r" or "\0" to the spawned
1455program. Redirection such as C<E<gt> foo> is performed (if at all) by
1456the run time library of the spawned program. C<system> I<list> will call
1457the Unix emulation library's C<exec> emulation, which attempts to provide
1458emulation of the stdin, stdout, stderr in force in the parent, providing
1459the child program uses a compatible version of the emulation library.
1460I<scalar> will call the native command line direct and no such emulation
1461of a child Unix program will exists. Mileage B<will> vary. (S<RISC OS>)
1462
433acd8a 1463Far from being POSIX compliant. Because there may be no underlying
1464/bin/sh tries to work around the problem by forking and execing the
1465first token in its argument string. Handles basic redirection ("<" or
1466">") on its own behalf. (MiNT)
1467
e41182b5 1468=item times
1469
1470Only the first entry returned is nonzero. (S<Mac OS>)
1471
1472"cumulative" times will be bogus. On anything other than Windows NT,
1473"system" time will be bogus, and "user" time is actually the time
1474returned by the clock() function in the C runtime library. (Win32)
1475
b8099c3d 1476Not useful. (S<RISC OS>)
1477
e41182b5 1478=item truncate FILEHANDLE,LENGTH
1479
1480=item truncate EXPR,LENGTH
1481
1482Not implemented. (VMS)
1483
495c5fdc 1484Truncation to zero-length only. (VOS)
1485
4cfdb94f 1486If a FILEHANDLE is supplied, it must be writable and opened in append
1487mode (i.e., use C<open(FH, '>>filename')>
1488or C<sysopen(FH,...,O_APPEND|O_RDWR)>. If a filename is supplied, it
1489should not be held open elsewhere. (Win32)
1490
e41182b5 1491=item umask EXPR
1492
1493=item umask
1494
1495Returns undef where unavailable, as of version 5.005.
1496
433acd8a 1497C<umask()> works but the correct permissions are only set when the file is
1498finally close()d.
1499
e41182b5 1500=item utime LIST
1501
b8099c3d 1502Only the modification time is updated. (S<Mac OS>, VMS, S<RISC OS>)
e41182b5 1503
322422de 1504May not behave as expected. Behavior depends on the C runtime
1505library's implementation of utime(), and the filesystem being
1506used. The FAT filesystem typically does not support an "access
1507time" field, and it may limit timestamps to a granularity of
1508two seconds. (Win32)
e41182b5 1509
1510=item wait
1511
1512=item waitpid PID,FLAGS
1513
495c5fdc 1514Not implemented. (S<Mac OS>, VOS)
e41182b5 1515
1516Can only be applied to process handles returned for processes spawned
1517using C<system(1, ...)>. (Win32)
1518
b8099c3d 1519Not useful. (S<RISC OS>)
1520
e41182b5 1521=back
1522
b8099c3d 1523=head1 CHANGES
1524
1525=over 4
1526
3c075c7d 1527=item v1.37, 19 December 1998
1528
1529More minor changes. Merge two separate version 1.35 documents.
1530
1531=item v1.36, 9 September 1998
1532
1533Updated for Stratus VOS. Also known as version 1.35.
1534
1535=item v1.35, 13 August 1998
495c5fdc 1536
3c075c7d 1537Integrate more minor changes, plus addition of new sections under
1538L<"ISSUES">: L<"Numbers endianness and Width">,
1539L<"Character sets and character encoding">,
1540L<"Internationalisation">.
495c5fdc 1541
3c075c7d 1542=item v1.33, 06 August 1998
0a47030a 1543
1544Integrate more minor changes.
1545
3c075c7d 1546=item v1.32, 05 August 1998
dd9f0070 1547
1548Integrate more minor changes.
1549
3c075c7d 1550=item v1.30, 03 August 1998
b8099c3d 1551
1552Major update for RISC OS, other minor changes.
1553
3c075c7d 1554=item v1.23, 10 July 1998
b8099c3d 1555
1556First public release with perl5.005.
1557
1558=back
e41182b5 1559
1560=head1 AUTHORS / CONTRIBUTORS
1561
dd9f0070 1562Abigail E<lt>abigail@fnx.comE<gt>,
bd3fa61c 1563Charles Bailey E<lt>bailey@newman.upenn.eduE<gt>,
dd9f0070 1564Graham Barr E<lt>gbarr@pobox.comE<gt>,
e41182b5 1565Tom Christiansen E<lt>tchrist@perl.comE<gt>,
dd9f0070 1566Nicholas Clark E<lt>Nicholas.Clark@liverpool.ac.ukE<gt>,
1567Andy Dougherty E<lt>doughera@lafcol.lafayette.eduE<gt>,
1568Dominic Dunlop E<lt>domo@vo.luE<gt>,
7c5ffed3 1569Neale Ferguson E<lt>neale@mailbox.tabnsw.com.auE<gt>
495c5fdc 1570Paul Green E<lt>Paul_Green@stratus.comE<gt>,
dd9f0070 1571M.J.T. Guy E<lt>mjtg@cus.cam.ac.ukE<gt>,
7c5ffed3 1572Jarkko Hietaniemi E<lt>jhi@iki.fi<gt>,
dd9f0070 1573Luther Huffman E<lt>lutherh@stratcom.comE<gt>,
1574Nick Ing-Simmons E<lt>nick@ni-s.u-net.comE<gt>,
322422de 1575Andreas J. KE<ouml>nig E<lt>koenig@kulturbox.deE<gt>,
3c075c7d 1576Markus Laker E<lt>mlaker@contax.co.ukE<gt>,
dd9f0070 1577Andrew M. Langmead E<lt>aml@world.std.comE<gt>,
e41182b5 1578Paul Moore E<lt>Paul.Moore@uk.origin-it.comE<gt>,
dd9f0070 1579Chris Nandor E<lt>pudge@pobox.comE<gt>,
322422de 1580Matthias Neeracher E<lt>neeri@iis.ee.ethz.chE<gt>,
e41182b5 1581Gary Ng E<lt>71564.1743@CompuServe.COME<gt>,
e41182b5 1582Tom Phoenix E<lt>rootbeer@teleport.comE<gt>,
dd9f0070 1583Peter Prymmer E<lt>pvhp@forte.comE<gt>,
322422de 1584Hugo van der Sanden E<lt>hv@crypt0.demon.co.ukE<gt>,
dd9f0070 1585Gurusamy Sarathy E<lt>gsar@umich.eduE<gt>,
1586Paul J. Schinder E<lt>schinder@pobox.comE<gt>,
e41182b5 1587Dan Sugalski E<lt>sugalskd@ous.eduE<gt>,
dd9f0070 1588Nathan Torkington E<lt>gnat@frii.comE<gt>.
e41182b5 1589
3c075c7d 1590This document is maintained by Chris Nandor
1591E<lt>pudge@pobox.comE<gt>.
e41182b5 1592
1593=head1 VERSION
1594
3c075c7d 1595Version 1.37, last modified 19 December 1998
495c5fdc 1596