1 If you read this file _as_is_, just ignore the funny characters you
2 see. It is written in the POD format (see perlpod manpage) which is
3 specially designed to be readable as is.
7 perlos2 - Perl under OS/2, Win0.31, Win0.95 and WinNT.
11 One can read this document in the following formats:
18 to list some (not all may be available simultaneously), or it may
19 be read I<as is>: either as F<README.os2>, or F<pod/perlos2.pod>.
25 perlos2 - Perl under OS/2
33 - Starting Perl programs under OS/2
34 - Starting OS/2 programs under Perl
35 Frequently asked questions
36 - I cannot run extenal programs
37 - I cannot embed perl into my program, or use perl.dll from my program.
39 - Automatic binary installation
40 - Manual binary installation
42 Accessing documentation
53 - Application of the patches
57 - Installing the built perl
60 - Some / became \ in pdksh.
61 - 'errno' - unresolved external
63 - Some problem (forget which ;-)
64 - Library ... not found
66 Specific (mis)features of OS/2 port
67 - setpriority, getpriority
78 - Why dynamic linking?
90 - Calls to external programs
98 The target is to make OS/2 the best supported platform for
99 using/building/developping Perl and I<Perl applications>, as well as
100 make Perl the best language to use under OS/2.
102 The current state is quite close to this target. Known limitations:
108 Some *nix programs use fork() a lot, but currently fork() is not
109 supported after I<use>ing dynamically loaded extensions.
113 You need a separate perl executable F<perl__.exe> (see L<perl__.exe>)
114 to use PM code in your application (like the forthcoming Perl/Tk).
118 There is no simple way to access B<WPS> objects. The only way I know
119 is via C<OS2::REXX> extension (see L<OS2::REXX>), and we do not have access to
120 convinience methods of B<Object REXX>. (Is it possible at all? I know
121 of no B<Object-REXX> API.)
125 Please keep this list up-to-date by informing me about other items.
129 Since OS/2 port of perl uses a remarkable B<EMX> environment, it can
130 run (and build extensions, and - possibly - be build itself) under any
131 environment which can run EMX. The current list is DOS,
132 DOS-inside-OS/2, Win0.31, Win0.95 and WinNT. Out of many perl flavors,
133 only one works, see L<"perl_.exe">.
135 Note that not all features of Perl are available under these
136 environments. This depends on the features the I<extender> - most
137 probably C<RSX> - decided to implement.
139 Cf. L<Prerequisites>.
147 B<EMX> runtime is required. Note that it is possible to make F<perl_.exe>
148 to run under DOS without any external support by binding F<emx.exe> to
151 Only the latest runtime is supported, currently C<0.9c>.
153 One can get different parts of B<EMX> from, say
155 ftp://ftp.cdrom.com/pub/os2/emx0.9c/
156 ftp://hobbes.nmsu.edu/os2/unix/gnu/
158 The runtime component should have the name F<emxrt.zip>.
162 To run Perl on C<DPMS> platforms one needs B<RSX> runtime. This is
163 needed under DOS-inside-OS/2, Win0.31, Win0.95 and WinNT (see
166 One can get B<RSX> from, say
168 ftp://ftp.cdrom.com/pub/os2/emx0.9c/contrib
169 ftp://ftp.uni-bielefeld.de/pub/systems/msdos/misc
171 Contact the author on C<rainer@mathematik.uni-bielefeld.de>.
175 Perl does not care about file systems, but to install the whole perl
176 library intact one needs a file system which supports long file names.
178 Note that if you do not plan to build the perl itself, it may be
179 possible to fool B<EMX> to truncate file names. This is not supported,
180 read B<EMX> docs to see how to do it.
184 =head2 Starting Perl programs under OS/2
186 Start your Perl program F<foo.pl> with arguments C<arg1 arg2 arg3> the
187 same way as on any other platform, by
189 perl foo.pl arg1 arg2 arg3
191 If you want to specify perl options C<-my_opts> to the perl itself (as
192 opposed to to your program), use
194 perl -my_opts foo.pl arg1 arg2 arg3
196 Alternately, if you use OS/2-ish shell, like C<CMD> or C<4os2>, put
197 the following at the start of your perl script:
200 #!/usr/bin/perl -my_opts
202 rename your program to F<foo.cmd>, and start it by typing
206 (Note that having *nixish full path to perl F</usr/bin/perl> is not
207 necessary, F<perl> would be enough, but having full path would make it
208 easier to use your script under *nix.)
210 Note that because of stupid OS/2 limitations the full path of the perl
211 script is not available when you use C<extproc>, thus you are forced to
212 use C<-S> perl switch, and your script should be on path. As a plus
213 side, if you know a full path to your script, you may still start it
216 perl -x ../../blah/foo.cmd arg1 arg2 arg3
218 (note that the argument C<-my_opts> is taken care of by the C<#!> line
221 To understand what the above I<magic> does, read perl docs about C<-S>
222 and C<-x> switches - see L<perlrun>, and cmdref about C<extproc>:
229 or whatever method you prefer.
231 There are also endless possibilites to use I<executable extensions> of
232 B<4OS2>, I<associations> of B<WPS> and so on... However, if you use
233 *nixish shell (like F<sh.exe> supplied in the binary distribution),
234 you need follow the syntax specified in L<perlrun/"Switches">.
236 =head2 Starting OS/2 programs under Perl
238 This is what system() (see L<perlfunc/system>), C<``> (see
239 L<perlop/"I/O Operators">), and I<open pipe> (see L<perlfunc/open>)
240 are for. (Avoid exec() (see L<perlfunc/exec>) unless you know what you
243 Note however that to use some of these operators you need to have a
244 C<sh>-syntax shell installed (see L<"Pdksh">,
245 L<"Frequently asked questions">), and perl should be able to find it
246 (see L<"PERL_SH_DIR">).
248 The only cases when the shell is not used is the multi-argument
249 system() (see L<perlfunc/system>)/exec() (see L<perlfunc/exec>), and
250 one-argument version thereof without redirection and shell
253 =head1 Frequently asked questions
255 =head2 I cannot run extenal programs
257 Did you run your programs with C<-w> switch? See
258 L<Starting OS/2 programs under Perl>.
260 =head2 I cannot embed perl into my program, or use F<perl.dll> from my
265 =item Is your program B<EMX>-compiled with C<-Zmt -Zcrtdll>?
267 If not, you need to build a stand-alone DLL for perl. Contact me, I
268 did it once. Sockets would not work, as a lot of other stuff.
270 =item Did you use C<ExtUtils::Embed>?
272 I had reports it does not work. Somebody would need to fix it.
278 =head2 Automatic binary installation
280 The most convinient way of installing perl is via perl installer
281 F<install.exe>. Just follow the instructions, and 99% of the
282 installation blues would go away.
284 Note however, that you need to have F<unzip.exe> on your path, and
285 B<EMX> environment I<running>. The latter means that if you just
286 installed B<EMX>, and made all the needed changes to F<Config.sys>,
287 you may need to reboot in between. Check B<EMX> runtime by running
291 A folder is created on your desktop which contains some useful
294 B<Things not taken care of by automatic binary installation:>
298 =item C<PERL_BADLANG>
300 may be needed if you change your codepage I<after> perl installation,
301 and the new value is not supported by B<EMX>. See L<"PERL_BADLANG">.
303 =item C<PERL_BADFREE>
305 see L<"PERL_BADFREE">.
309 This file resides somewhere deep in the location you installed your
310 perl library, find it out by
312 perl -MConfig -le "print $INC{'Config.pm'}"
314 While most important values in this file I<are> updated by the binary
315 installer, some of them may need to be hand-edited. I know no such
316 data, please keep me informed if you find one.
320 =head2 Manual binary installation
322 As of version 5.00305, OS/2 perl binary distribution comes splitted
323 into 11 components. Unfortunately, to enable configurable binary
324 installation, the file paths in the C<zip> files are not absolute, but
325 relative to some directory.
327 Note that the extraction with the stored paths is still necessary
328 (default with C<unzip>, specify C<-d> to C<pkunzip>). However, you
329 need to know where to extract the files. You need also to manually
330 change entries in F<Config.sys> to reflect where did you put the
333 Below is the sample of what to do to reproduce the configuration on my
338 =item Perl VIO and PM executables (dynamically linked)
340 unzip perl_exc.zip *.exe *.ico -d f:/emx.add/bin
341 unzip perl_exc.zip *.dll -d f:/emx.add/dll
343 (have the directories with C<*.exe> on C<PATH>, and C<*.dll> on
346 =item Perl_ VIO executable (statically linked)
348 unzip perl_aou.zip -d f:/emx.add/bin
350 (have the directory on C<PATH>);
352 =item Executables for Perl utilities
354 unzip perl_utl.zip -d f:/emx.add/bin
356 (have the directory on C<PATH>);
358 =item Main Perl library
360 unzip perl_mlb.zip -d f:/perllib/lib
362 If this directory is preserved, you do not need to change
363 anything. However, for perl to find it if it is changed, you need to
364 C<set PERLLIB_PREFIX> in F<Config.sys>, see L<"PERLLIB_PREFIX">.
366 =item Additional Perl modules
368 unzip perl_ste.zip -d f:/perllib/lib/site_perl
370 If you do not change this directory, do nothing. Otherwise put this
371 directory and subdirectory F<./os2> in C<PERLLIB> or C<PERL5LIB>
372 variable. Do not use C<PERL5LIB> unless you have it set already. See
373 L<perl/"ENVIRONMENT">.
375 =item Tools to compile Perl modules
377 unzip perl_blb.zip -d f:/perllib/lib
379 If this directory is preserved, you do not need to change
380 anything. However, for perl to find it if it is changed, you need to
381 C<set PERLLIB_PREFIX> in F<Config.sys>, see L<"PERLLIB_PREFIX">.
383 =item Manpages for Perl and utilities
385 unzip perl_man.zip -d f:/perllib/man
387 This directory should better be on C<MANPATH>. You need to have a
388 working C<man> to access these files.
390 =item Manpages for Perl modules
392 unzip perl_mam.zip -d f:/perllib/man
394 This directory should better be on C<MANPATH>. You need to have a
395 working C<man> to access these files.
397 =item Source for Perl documentation
399 unzip perl_pod.zip -d f:/perllib/lib
401 This is used by by C<perldoc> program (see L<perldoc>), and may be used to
402 generate B<HTML> documentation usable by WWW browsers, and
403 documentation in zillions of other formats: C<info>, C<LaTeX>,
404 C<Acrobat>, C<FrameMaker> and so on.
406 =item Perl manual in .INF format
408 unzip perl_inf.zip -d d:/os2/book
410 This directory should better be on C<BOOKSHELF>.
414 unzip perl_sh.zip -d f:/bin
416 This is used by perl to run external commands which explicitely
417 require shell, like the commands using I<redirection> and I<shell
418 metacharacters>. It is also used instead of explicit F</bin/sh>.
420 Set C<PERL_SH_DIR> (see L<"PERL_SH_DIR">) if you move F<sh.exe> from
423 B<Note.> It may be possible to use some other C<sh>-compatible shell
428 After you installed the components you needed and updated the
429 F<Config.sys> correspondingly, you need to hand-edit
430 F<Config.pm>. This file resides somewhere deep in the location you
431 installed your perl library, find it out by
433 perl -MConfig -le "print $INC{'Config.pm'}"
435 You need to correct all the entries which look like file paths (they
436 currently start with C<f:/>).
440 The automatic and manual perl installation leave precompiled paths
441 inside perl executables. While these paths are overwriteable (see
442 L<"PERLLIB_PREFIX">, L<"PERL_SH_DIR">), one may get better results by
443 binary editing of paths inside the executables/DLLs.
445 =head1 Accessing documentation
447 Depending on how you built/installed perl you may have (otherwise
448 identical) Perl documentation in the following formats:
450 =head2 OS/2 F<.INF> file
452 Most probably the most convinient form. View it as
457 view perl ExtUtils::MakeMaker
459 (currently the last two may hit a wrong location, but this may improve
462 If you want to build the docs yourself, and have I<OS/2 toolkit>, run
466 in F</perllib/lib/pod> directory, then
470 (Expect a lot of errors during the both steps.) Now move it on your
475 If you have perl documentation in the source form, perl utilities
476 installed, and B<GNU> C<groff> installed, you may use
480 perldoc ExtUtils::MakeMaker
482 to access the perl documention in the text form (note that you may get
483 better results using perl manpages).
485 Alternately, try running pod2text on F<.pod> files.
489 If you have C<man> installed on your system, and you installed perl
490 manpages, use something like this:
494 man ExtUtils.MakeMaker
496 to access documentation for different components of Perl. Start with
500 Note that dot (F<.>) is used as a package separator for documentation
501 for packages, and as usual, sometimes you need to give the section - C<3>
502 above - to avoid shadowing by the I<less(1) manpage>.
504 Make sure that the directory B<above> the directory with manpages is
505 on our C<MANPATH>, like this
507 set MANPATH=c:/man;f:/perllib/man
511 If you have some WWW browser available, installed the Perl
512 documentation in the source form, and Perl utilities, you can build
513 B<HTML> docs. Cd to directory with F<.pod> files, and do like this
515 cd f:/perllib/lib/pod
518 After this you can direct your browser the file F<perl.html> in this
519 directory, and go ahead with reading docs, like this:
521 explore file:///f:/perllib/lib/pod/perl.html
523 Alternatively you may be able to get these docs prebuild from C<CPAN>.
525 =head2 B<GNU> C<info> files
527 Users of C<Emacs> would appreciate it very much, especially with
528 C<CPerl> mode loaded. You need to get latest C<pod2info> from C<CPAN>,
529 or, alternately, prebuilt info pages.
533 for C<Acrobat> are available on CPAN (for slightly old version of
538 can be constructed using C<pod2latex>.
542 Here we discuss how to build Perl under OS/2. There is an alternative
543 (but maybe older) view on L<http://www.shadow.net/~troc/os2perl.html>.
547 You need to have the latest B<EMX> development environment, the full
548 B<GNU> tool suite (C<gawk> renamed to C<awk>, and B<GNU> F<find.exe>
549 earlier on path than the OS/2 F<find.exe>, same with F<sort.exe>, to
555 ). You need the latest version of F<pdksh> installed as F<sh.exe>.
557 Possible locations to get this from are
559 ftp://hobbes.nmsu.edu/os2/unix/gnu/
560 ftp://ftp.cdrom.com/pub/os2/unix/
561 ftp://ftp.cdrom.com/pub/os2/dev32/
562 ftp://ftp.cdrom.com/pub/os2/emx0.9c/
565 Make sure that no copies or perl are currently running. Later steps
566 of the build may fail since an older version of perl.dll loaded into
569 Also make sure that you have F</tmp> directory on the current drive,
570 and F<.> directory in your C<LIBPATH>. One may try to correct the
575 if you use something like F<CMD.EXE> or latest versions of F<4os2.exe>.
577 Make sure your C<gcc> is good for C<-Zomf> linking: run C<omflibs>
578 script in F</emx/lib> directory.
580 Check that you have C<link386> installed. It comes standard with OS/2,
581 but may be not installed due to customization. If typing
585 shows you do not have it, do I<Selective install>, and choose C<Link
586 object modules> in I<Optional system utilites/More>. If you get into
587 C<link386>, press C<Ctrl-C>.
589 =head2 Getting perl source
591 You need to fetch the latest perl source (including developpers
592 releases). With some probability it is located in
594 http://www.perl.com/CPAN/src/5.0
595 http://www.perl.com/CPAN/src/5.0/unsupported
597 If not, you may need to dig in the indices to find it in the directory
598 of the current maintainer.
600 Quick cycle of developpers release may break the OS/2 build time to
603 http://www.perl.com/CPAN/ports/os2/ilyaz/
605 may indicate the latest release which was publicly released by the
606 maintainer. Note that the release may include some additional patches
607 to apply to the current source of perl.
611 tar vzxf perl5.00409.tar.gz
613 You may see a message about errors while extracting F<Configure>. This is
614 because there is a conflict with a similarly-named file F<configure>.
616 Rename F<configure> to F<configure.gnu>. Extract F<Configure> like this
618 tar --case-sensitive -vzxf perl5.00409.tar.gz perl5.00409/Configure
620 Change to the directory of extraction.
622 =head2 Application of the patches
624 You need to apply the patches in F<./os2/diff.*> and
625 F<./os2/POSIX.mkfifo> like this:
627 gnupatch -p0 < os2\POSIX.mkfifo
628 gnupatch -p0 < os2\os2\diff.configure
630 You may also need to apply the patches supplied with the binary
631 distribution of perl.
633 Note also that the F<db.lib> and F<db.a> from the B<EMX> distribution
634 are not suitable for multi-threaded compile (note that currently perl
635 is not multithreaded, but is compiled as multithreaded for
636 compatibility with B<XFree86>-OS/2). Get a corrected one from
638 ftp://ftp.math.ohio-state.edu/pub/users/ilya/os2/db_mt.zip
642 You may look into the file F<./hints/os2.sh> and correct anything
643 wrong you find there. I do not expect it is needed anywhere.
647 sh Configure -des -D prefix=f:/perllib
649 Prefix means where to install the resulting perl library. Giving
650 correct prefix you may avoid the need to specify C<PERLLIB_PREFIX>,
651 see L<"PERLLIB_PREFIX">.
653 I<Ignore the message about missing C<ln>, and about C<-c> option to
654 C<tr>>. In fact if you can trace where the latter spurious warning
655 comes from, please inform me.
661 At some moment the built may die, reporting a I<version mismatch> or
662 I<unable to run F<perl>>. This means that most of the build has been
663 finished, and it is the time to move the constructed F<perl.dll> to
664 some I<absolute> location in C<LIBPATH>. After this done the build
665 should finish without a lot of fuss. I<One can avoid it if one has the
666 correct prebuilt version of F<perl.dll> on C<LIBPATH>.>
668 Warnings which are safe to ignore: I<mkfifo() redefined> inside
677 Some tests (4..6) should fail. Some perl invocations should end in a
678 segfault (system error C<SYS3175>). To get finer error reports,
681 perl -I ../lib harness
683 The report you get may look like
685 Failed Test Status Wstat Total Fail Failed List of failed
686 ---------------------------------------------------------------
687 io/fs.t 26 11 42.31% 2-5, 7-11, 18, 25
688 lib/io_pipe.t 3 768 6 ?? % ??
689 lib/io_sock.t 3 768 5 ?? % ??
690 op/stat.t 56 5 8.93% 3-4, 20, 35, 39
691 Failed 4/118 test scripts, 96.61% okay. 27/2445 subtests failed, 98.90% okay.
693 Note that using `make test' target two more tests may fail: C<op/exec:1>
694 because of (mis)feature of C<pdksh>, and C<lib/posix:15>, which checks
695 that the buffers are not flushed on C<_exit>.
697 The reasons for failed tests are:
703 Checks I<file system> operations. Tests:
709 Check C<link()> and C<inode count> - nonesuch under OS/2.
713 Checks C<atime> and C<mtime> of C<stat()> - I could not understand this test.
717 Checks C<truncate()> on a filehandle just opened for write - I do not
718 know why this should or should not work.
722 =item F<lib/io_pipe.t>
724 Checks C<IO::Pipe> module. Some feature of B<EMX> - test fork()s with
725 dynamic extension loaded - unsupported now.
727 =item F<lib/io_sock.t>
729 Checks C<IO::Socket> module. Some feature of B<EMX> - test fork()s
730 with dynamic extension loaded - unsupported now.
734 Checks C<stat()>. Tests:
740 Checks C<inode count> - nonesuch under OS/2.
744 Checks C<mtime> and C<ctime> of C<stat()> - I could not understand this test.
748 Checks C<-x> - determined by the file extension only under OS/2.
756 Checks C<-t> of F</dev/null>. Should not fail!
762 In addition to errors, you should get a lot of warnings.
766 =item A lot of `bad free'
768 in databases related to Berkeley DB. This is a confirmed bug of
769 DB. You may disable this warnings, see L<"PERL_BADFREE">.
771 =item Process terminated by SIGTERM/SIGINT
773 This is a standard message issued by OS/2 applications. *nix
774 applications die in silence. It is considered a feature. One can
775 easily disable this by appropriate sighandlers.
777 However the test engine bleeds these message to screen in unexpected
778 moments. Two messages of this kind I<should> be present during
781 =item F<*/sh.exe>: ln: not found
783 =item C<ls>: /dev: No such file or directory
785 The last two should be self-explanatory. The test suite discovers that
786 the system it runs on is not I<that much> *nixish.
790 A lot of `bad free'... in databases, bug in DB confirmed on other
791 platforms. You may disable it by setting PERL_BADFREE environment variable
794 =head2 Installing the built perl
800 It would put the generated files into needed locations. Manually put
801 F<perl.exe>, F<perl__.exe> and F<perl___.exe> to a location on your
802 C<PATH>, F<perl.dll> to a location on your C<LIBPATH>.
806 make cmdscripts INSTALLCMDDIR=d:/ir/on/path
808 to convert perl utilities to F<.cmd> files and put them on
809 C<PATH>. You need to put F<.EXE>-utilities on path manually. They are
810 installed in C<$prefix/bin>, here C<$prefix> is what you gave to
811 F<Configure>, see L<Making>.
813 =head2 C<a.out>-style build
815 Proceed as above, but make F<perl_.exe> (see L<"perl_.exe">) by
824 Manually put F<perl_.exe> to a location on your C<PATH>.
826 Since C<perl_> has the extensions prebuilt, it does not suffer from
827 the I<dynamic extensions + fork()> syndrom, thus the failing tests
830 Failed Test Status Wstat Total Fail Failed List of failed
831 ---------------------------------------------------------------
832 io/fs.t 26 11 42.31% 2-5, 7-11, 18, 25
833 op/stat.t 56 5 8.93% 3-4, 20, 35, 39
834 Failed 2/118 test scripts, 98.31% okay. 16/2445 subtests failed, 99.35% okay.
836 B<Note.> The build process for C<perl_> I<does not know> about all the
837 dependencies, so you should make sure that anything is up-to-date,
846 =head2 Some C</> became C<\> in pdksh.
848 You have a very old pdksh. See L<Prerequisites>.
850 =head2 C<'errno'> - unresolved external
852 You do not have MT-safe F<db.lib>. See L<Prerequisites>.
854 =head2 Problems with C<tr>
856 reported with very old version of C<tr>.
858 =head2 Some problem (forget which ;-)
860 You have an older version of F<perl.dll> on your C<LIBPATH>, which
861 broke the build of extensions.
863 =head2 Library ... not found
865 You did not run C<omflibs>. See L<Prerequisites>.
867 =head2 Segfault in make
869 You use an old version of C<GNU> make. See L<Prerequisites>.
871 =head1 Specific (mis)features of OS/2 port
873 =head2 C<setpriority>, C<getpriority>
875 Note that these functions are compatible with *nix, not with the older
876 ports of '94 - 95. The priorities are absolute, go from 32 to -95,
877 lower is quickier. 0 is the default priority.
881 Multi-argument form of C<system()> allows an additional numeric
882 argument. The meaning of this argument is described in
885 =head2 Additional modules:
887 L<OS2::Process>, L<OS2::REXX>, L<OS2::PrfDB>, L<OS2::ExtAttr>. This
888 modules provide access to additional numeric argument for C<system>,
889 to DLLs having functions with REXX signature and to REXX runtime, to
890 OS/2 databases in the F<.INI> format, and to Extended Attributes.
892 Two additional extensions by Andread Kaiser, C<OS2::UPM>, and
893 C<OS2::FTP>, are included into my ftp directory, mirrored on CPAN.
895 =head2 Prebuilt methods:
899 =item C<File::Copy::syscopy>
901 used by C<File::Copy::copy>, see L<File::Copy/copy>.
903 =item C<DynaLoader::mod2fname>
905 used by C<DynaLoader> for DLL name mungling.
907 =item C<Cwd::current_drive()>
911 =item C<Cwd::sys_chdir(name)>
913 leaves drive as it is.
915 =item C<Cwd::change_drive(name)>
918 =item C<Cwd::sys_is_absolute(name)>
920 means has drive letter and is_rooted.
922 =item C<Cwd::sys_is_rooted(name)>
924 means has leading C<[/\\]> (maybe after a drive-letter:).
926 =item C<Cwd::sys_is_relative(name)>
928 means changes with current dir.
930 =item C<Cwd::sys_cwd(name)>
932 Interface to cwd from B<EMX>. Used by C<Cwd::cwd>.
934 =item C<Cwd::sys_abspath(name, dir)>
936 Really really odious function to implement. Returns absolute name of
937 file which would have C<name> if CWD were C<dir>. C<Dir> defaults to the
940 =item C<Cwd::extLibpath([type])
942 Get current value of extended library search path. If C<type> is
943 present and I<true>, works with END_LIBPATH, otherwise with
946 =item C<Cwd::extLibpath_set( path [, type ] )>
948 Set current value of extended library search path. If C<type> is
949 present and I<true>, works with END_LIBPATH, otherwise with
954 (Note that some of these may be moved to different libraries -
964 Since <lockf> is present in B<EMX>, but is not functional, the same is
969 Since F<sh.exe> is used for globbing (see L<perlfunc/glob>), the bugs
970 of F<sh.exe> plague perl as well.
972 In particular, uppercase letters do not work in C<[...]>-patterns with
973 the current C<pdksh>.
979 Because of ideosyncrasies of OS/2 one cannot have all the eggs in the
980 same basket (though C<EMX> environment tries hard to overcome this
981 limitations, so the situation may somehow improve). There are 4
982 executables for Perl provided by the distribution:
986 The main workhorse. This is a chimera executable: it is compiled as an
987 C<a.out>-style executable, but is linked with C<omf>-style dynamic
988 library F<perl.dll>, and with dynamic B<CRT> DLL. This executable is a
991 It can load perl dynamic extensions, and it can fork(). Unfortunately,
992 currently it cannot fork() with dynamic extensions loaded.
994 B<Note.> Keep in mind that fork() is needed to open a pipe to yourself.
998 This is a statically linked C<a.out>-style executable. It can fork(),
999 but cannot load dynamic Perl extensions. The supplied executable has a
1000 lot of extensions prebuilt, thus there are situations when it can
1001 perform tasks not possible using F<perl.exe>, like fork()ing when
1002 having some standard extension loaded. This executable is a C<VIO>
1005 B<Note.> A better behaviour could be obtained from C<perl.exe> if it
1006 were statically linked with standard I<Perl extensions>, but
1007 dynamically linked with the I<Perl DLL> and C<CRT> DLL. Then it would
1008 be able to fork() with standard extensions, I<and> would be able to
1009 dynamically load arbitrary extensions. Some changes to Makefiles and
1010 hint files should be necessary to achieve this.
1012 I<This is also the only executable with does not require OS/2.> The
1013 friends locked into C<M$> world would appreciate the fact that this
1014 executable runs under DOS, Win0.31, Win0.95 and WinNT with an
1015 appropriate extender. See L<"Other OSes">.
1017 =head2 F<perl__.exe>
1019 This is the same executable as <perl___.exe>, but it is a C<PM>
1022 B<Note.> Usually C<STDIN>, C<STDERR>, and C<STDOUT> of a C<PM>
1023 application are redirected to C<nul>. However, it is possible to see
1024 them if you start C<perl__.exe> from a PM program which emulates a
1025 console window, like I<Shell mode> of C<Emacs> or C<EPM>. Thus it I<is
1026 possible> to use Perl debugger (see L<perldebug>) to debug your PM
1029 This flavor is required if you load extensions which use C<PM>, like
1030 the forthcoming C<Perl/Tk>.
1032 =head2 F<perl___.exe>
1034 This is an C<omf>-style executable which is dynamically linked to
1035 F<perl.dll> and C<CRT> DLL. I know no advantages of this executable
1036 over C<perl.exe>, but it cannot fork() at all. Well, one advantage is
1037 that the build process is not so convoluted as with C<perl.exe>.
1039 It is a C<VIO> application.
1041 =head2 Why strange names?
1043 Since Perl processes the C<#!>-line (cf.
1044 L<perlrun/DESCRIPTION>, L<perlrun/Switches>,
1045 L<perldiag/"Not a perl script">,
1046 L<perldiag/"No Perl script found in input">), it should know when a
1047 program I<is a Perl>. There is some naming convention which allows
1048 Perl to distinguish correct lines from wrong ones. The above names are
1049 almost the only names allowed by this convension which do not contain
1050 digits (which have absolutely different semantics).
1052 =head2 Why dynamic linking?
1054 Well, having several executables dynamically linked to the same huge
1055 library has its advantages, but this would not substantiate the
1056 additional work to make it compile. The reason is stupid-but-quick
1057 "hard" dynamic linking used by OS/2.
1059 The address tables of DLLs are patches only once, when they are
1060 loaded. The addresses of entry points into DLLs are guarantied to be
1061 the same for all programs which use the same DLL, which reduces the
1062 amount of runtime patching - once DLL is loaded, its code is
1065 While this allows some performance advantages, this makes life
1066 terrible for developpers, since the above scheme makes it impossible
1067 for a DLL to be resolved to a symbol in the .EXE file, since this
1068 would need a DLL to have different relocations tables for the
1069 executables which use it.
1071 However, a Perl extension is forced to use some symbols from the perl
1072 executable, say to know how to find the arguments provided on the perl
1073 internal evaluation stack. The solution is that the main code of
1074 interpreter should be contained in a DLL, and the F<.EXE> file just loads
1075 this DLL into memory and supplies command-arguments.
1077 This I<greately> increases the load time for the application (as well as
1078 the number of problems during compilation). Since interpreter is in a DLL,
1079 the C<CRT> is basically forced to reside in a DLL as well (otherwise
1080 extensions would not be able to use C<CRT>).
1082 =head2 Why chimera build?
1084 Current C<EMX> environment does not allow DLLs compiled using Unixish
1085 C<a.out> format to export symbols for data. This forces C<omf>-style
1086 compile of F<perl.dll>.
1088 Current C<EMX> environment does not allow F<.EXE> files compiled in
1089 C<omf> format to fork(). fork() is needed for exactly three Perl
1094 =item explicit fork()
1102 opening pipes to itself.
1106 While these operations are not questions of life and death, a lot of
1107 useful scripts use them. This forces C<a.out>-style compile of
1113 Here we list environment variables with are either OS/2-specific, or
1114 are more important under OS/2 than under other OSes.
1116 =head2 C<PERLLIB_PREFIX>
1118 Specific for OS/2. Should have the form
1126 If the beginning of some prebuilt path matches F<path1>, it is
1127 substituted with F<path2>.
1129 Should be used if the perl library is moved from the default
1130 location in preference to C<PERL(5)LIB>, since this would not leave wrong
1133 =head2 C<PERL_BADLANG>
1135 If 1, perl ignores setlocale() failing. May be useful with some
1138 =head2 C<PERL_BADFREE>
1140 If 1, perl would not warn of in case of unwarranted free(). May be
1141 useful in conjunction with the module DB_File, since Berkeley DB
1142 memory handling code is buggy.
1144 =head2 C<PERL_SH_DIR>
1146 Specific for OS/2. Gives the directory part of the location for
1149 =head2 C<TMP> or C<TEMP>
1151 Specific for OS/2. Used as storage place for temporary files, most
1152 notably C<-e> scripts.
1156 Here we list major changes which could make you by surprise.
1160 C<setpriority> and C<getpriority> are not compatible with earlier
1161 ports by Andreas Kaiser. See C<"setpriority, getpriority">.
1163 =head2 DLL name mungling
1165 With the release 5.003_01 the dynamically loadable libraries
1166 should be rebuilt. In particular, DLLs are now created with the names
1167 which contain a checksum, thus allowing workaround for OS/2 scheme of
1172 As of release 5.003_01 perl is linked to multithreaded C<CRT>
1173 DLL. Perl itself is not multithread-safe, as is not perl
1174 malloc(). However, extensions may use multiple thread on their own
1177 Needed to compile C<Perl/Tk> for C<XFreeOS/2> out-of-the-box.
1179 =head2 Calls to external programs
1181 Due to a popular demand the perl external program calling has been
1182 changed wrt Andread Kaiser's port. I<If> perl needs to call an
1183 external program I<via shell>, the F<f:/bin/sh.exe> will be called, or
1184 whatever is the override, see L<"PERL_SH_DIR">.
1186 Thus means that you need to get some copy of a F<sh.exe> as well (I
1187 use one from pdksh). The drive F: above is set up automatically during
1188 the build to a correct value on the builder machine, but is
1189 overridable at runtime,
1191 B<Reasons:> a consensus on C<perl5-porters> was that perl should use
1192 one non-overridable shell per platform. The obvious choices for OS/2
1193 are F<cmd.exe> and F<sh.exe>. Having perl build itself would be impossible
1194 with F<cmd.exe> as a shell, thus I picked up C<sh.exe>. Thus assures almost
1195 100% compatibility with the scripts coming from *nix.
1197 B<Disadvantages:> currently F<sh.exe> of C<pdksh> calls external programs
1198 via fork()/exec(), and there is I<no> functioning exec() on
1199 OS/2. exec() is emulated by EMX by asyncroneous call while the caller
1200 waits for child completion (to pretend that the pid did not change). This
1201 means that 1 I<extra> copy of F<sh.exe> is made active via fork()/exec(),
1202 which may lead to some resources taken from the system (even if we do
1203 not count extra work needed for fork()ing).
1205 One can always start F<cmd.exe> explicitely via
1207 system 'cmd', '/c', 'mycmd', 'arg1', 'arg2', ...
1209 If you need to use F<cmd.exe>, and do not want to hand-edit thousends of your
1210 scripts, the long-term solution proposed on p5-p is to have a directive
1214 which will override system(), exec(), C<``>, and
1215 C<open(,'...|')>. With current perl you may override only system(),
1216 readpipe() - the explicit version of C<``>, and maybe exec(). The code
1217 will substitute the one-argument call to system() by
1218 C<CORE::system('cmd.exe', '/c', shift)>.
1220 If you have some working code for C<OS2::Cmd>, please send it to me,
1221 I will include it into distribution. I have no need for such a module, so
1228 I include 3 extensions by Andread Kaiser, OS2::REXX, OS2::UPM, and OS2::FTP,
1229 into my ftp directory, mirrored on CPAN. I made
1230 some minor changes needed to compile them by standard tools. I cannot
1231 test UPM and FTP, so I will appreciate your feedback. Other extensions
1232 there are OS2::ExtAttr, OS2::PrfDB for tied access to EAs and .INI
1233 files - and maybe some other extensions at the time you read it.
1235 Note that OS2 perl defines 2 pseudo-extension functions
1236 OS2::Copy::copy and DynaLoader::mod2fname.
1238 The -R switch of older perl is deprecated. If you need to call a REXX code
1239 which needs access to variables, include the call into a REXX compartment
1241 REXX_call {...block...};
1243 Two new functions are supported by REXX code,
1245 REXX_eval_with 'string', REXX_function_name => \&perl_sub_reference;
1247 If you have some other extensions you want to share, send the code to
1248 me. At least two are available: tied access to EA's, and tied access
1249 to system databases.
1253 Ilya Zakharevich, ilya@math.ohio-state.edu