1 | This document is written in pod format hence there are punctuation |
---|
2 | characters in odd places. Do not worry, you've apparently got the |
---|
3 | ASCII->EBCDIC translation worked out correctly. You can read more |
---|
4 | about pod in pod/perlpod.pod or the short summary in the INSTALL file. |
---|
5 | |
---|
6 | =head1 NAME |
---|
7 | |
---|
8 | README.BS2000 - building and installing Perl for BS2000. |
---|
9 | |
---|
10 | =head1 SYNOPSIS |
---|
11 | |
---|
12 | This document will help you Configure, build, test and install Perl |
---|
13 | on BS2000 in the POSIX subsystem. |
---|
14 | |
---|
15 | =head1 DESCRIPTION |
---|
16 | |
---|
17 | This is a ported perl for the POSIX subsystem in BS2000 VERSION OSD |
---|
18 | V3.1A or later. It may work on other versions, but we started porting |
---|
19 | and testing it with 3.1A and are currently using Version V4.0A. |
---|
20 | |
---|
21 | You may need the following GNU programs in order to install perl: |
---|
22 | |
---|
23 | =head2 gzip on BS2000 |
---|
24 | |
---|
25 | We used version 1.2.4, which could be installed out of the box with |
---|
26 | one failure during 'make check'. |
---|
27 | |
---|
28 | =head2 bison on BS2000 |
---|
29 | |
---|
30 | The yacc coming with BS2000 POSIX didn't work for us. So we had to |
---|
31 | use bison. We had to make a few changes to perl in order to use the |
---|
32 | pure (reentrant) parser of bison. We used version 1.25, but we had to |
---|
33 | add a few changes due to EBCDIC. See below for more details |
---|
34 | concerning yacc. |
---|
35 | |
---|
36 | =head2 Unpacking Perl Distribution on BS2000 |
---|
37 | |
---|
38 | To extract an ASCII tar archive on BS2000 POSIX you need an ASCII |
---|
39 | filesystem (we used the mountpoint /usr/local/ascii for this). Now |
---|
40 | you extract the archive in the ASCII filesystem without |
---|
41 | I/O-conversion: |
---|
42 | |
---|
43 | cd /usr/local/ascii |
---|
44 | export IO_CONVERSION=NO |
---|
45 | gunzip < /usr/local/src/perl.tar.gz | pax -r |
---|
46 | |
---|
47 | You may ignore the error message for the first element of the archive |
---|
48 | (this doesn't look like a tar archive / skipping to next file...), |
---|
49 | it's only the directory which will be created automatically anyway. |
---|
50 | |
---|
51 | After extracting the archive you copy the whole directory tree to your |
---|
52 | EBCDIC filesystem. B<This time you use I/O-conversion>: |
---|
53 | |
---|
54 | cd /usr/local/src |
---|
55 | IO_CONVERSION=YES |
---|
56 | cp -r /usr/local/ascii/perl5.005_02 ./ |
---|
57 | |
---|
58 | =head2 Compiling Perl on BS2000 |
---|
59 | |
---|
60 | There is a "hints" file for BS2000 called hints.posix-bc (because |
---|
61 | posix-bc is the OS name given by `uname`) that specifies the correct |
---|
62 | values for most things. The major problem is (of course) the EBCDIC |
---|
63 | character set. We have german EBCDIC version. |
---|
64 | |
---|
65 | Because of our problems with the native yacc we used GNU bison to |
---|
66 | generate a pure (=reentrant) parser for perly.y. So our yacc is |
---|
67 | really the following script: |
---|
68 | |
---|
69 | -----8<-----/usr/local/bin/yacc-----8<----- |
---|
70 | #! /usr/bin/sh |
---|
71 | |
---|
72 | # Bison as a reentrant yacc: |
---|
73 | |
---|
74 | # save parameters: |
---|
75 | params="" |
---|
76 | while [[ $# -gt 1 ]]; do |
---|
77 | params="$params $1" |
---|
78 | shift |
---|
79 | done |
---|
80 | |
---|
81 | # add flag %pure_parser: |
---|
82 | |
---|
83 | tmpfile=/tmp/bison.$$.y |
---|
84 | echo %pure_parser > $tmpfile |
---|
85 | cat $1 >> $tmpfile |
---|
86 | |
---|
87 | # call bison: |
---|
88 | |
---|
89 | echo "/usr/local/bin/bison --yacc $params $1\t\t\t(Pure Parser)" |
---|
90 | /usr/local/bin/bison --yacc $params $tmpfile |
---|
91 | |
---|
92 | # cleanup: |
---|
93 | |
---|
94 | rm -f $tmpfile |
---|
95 | -----8<----------8<----- |
---|
96 | |
---|
97 | We still use the normal yacc for a2p.y though!!! We made a softlink |
---|
98 | called byacc to distinguish between the two versions: |
---|
99 | |
---|
100 | ln -s /usr/bin/yacc /usr/local/bin/byacc |
---|
101 | |
---|
102 | We build perl using GNU make. We tried the native make once and it |
---|
103 | worked too. |
---|
104 | |
---|
105 | =head2 Testing Perl on BS2000 |
---|
106 | |
---|
107 | We still got a few errors during C<make test>. Some of them are the |
---|
108 | result of using bison. Bison prints I<parser error> instead of I<syntax |
---|
109 | error>, so we may ignore them. The following list shows |
---|
110 | our errors, your results may differ: |
---|
111 | |
---|
112 | op/numconvert.......FAILED tests 1409-1440 |
---|
113 | op/regexp...........FAILED tests 483, 496 |
---|
114 | op/regexp_noamp.....FAILED tests 483, 496 |
---|
115 | pragma/overload.....FAILED tests 152-153, 170-171 |
---|
116 | pragma/warnings.....FAILED tests 14, 82, 129, 155, 192, 205, 207 |
---|
117 | lib/bigfloat........FAILED tests 351-352, 355 |
---|
118 | lib/bigfltpm........FAILED tests 354-355, 358 |
---|
119 | lib/complex.........FAILED tests 267, 487 |
---|
120 | lib/dumper..........FAILED tests 43, 45 |
---|
121 | Failed 11/231 test scripts, 95.24% okay. 57/10595 subtests failed, 99.46% okay. |
---|
122 | |
---|
123 | =head2 Installing Perl on BS2000 |
---|
124 | |
---|
125 | We have no nroff on BS2000 POSIX (yet), so we ignored any errors while |
---|
126 | installing the documentation. |
---|
127 | |
---|
128 | |
---|
129 | =head2 Using Perl in the Posix-Shell of BS2000 |
---|
130 | |
---|
131 | BS2000 POSIX doesn't support the shebang notation |
---|
132 | (C<#!/usr/local/bin/perl>), so you have to use the following lines |
---|
133 | instead: |
---|
134 | |
---|
135 | : # use perl |
---|
136 | eval 'exec /usr/local/bin/perl -S $0 ${1+"$@"}' |
---|
137 | if $running_under_some_shell; |
---|
138 | |
---|
139 | =head2 Using Perl in "native" BS2000 |
---|
140 | |
---|
141 | We don't have much experience with this yet, but try the following: |
---|
142 | |
---|
143 | Copy your Perl executable to a BS2000 LLM using bs2cp: |
---|
144 | |
---|
145 | C<bs2cp /usr/local/bin/perl 'bs2:perl(perl,l)'> |
---|
146 | |
---|
147 | Now you can start it with the following (SDF) command: |
---|
148 | |
---|
149 | C</START-PROG FROM-FILE=*MODULE(PERL,PERL),PROG-MODE=*ANY,RUN-MODE=*ADV> |
---|
150 | |
---|
151 | First you get the BS2000 commandline prompt ('*'). Here you may enter |
---|
152 | your parameters, e.g. C<-e 'print "Hello World!\\n";'> (note the |
---|
153 | double backslash!) or C<-w> and the name of your Perl script. |
---|
154 | Filenames starting with C</> are searched in the Posix filesystem, |
---|
155 | others are searched in the BS2000 filesystem. You may even use |
---|
156 | wildcards if you put a C<%> in front of your filename (e.g. C<-w |
---|
157 | checkfiles.pl %*.c>). Read your C/C++ manual for additional |
---|
158 | possibilities of the commandline prompt (look for |
---|
159 | PARAMETER-PROMPTING). |
---|
160 | |
---|
161 | =head2 Floating point anomalies on BS2000 |
---|
162 | |
---|
163 | There appears to be a bug in the floating point implementation on BS2000 POSIX |
---|
164 | systems such that calling int() on the product of a number and a small |
---|
165 | magnitude number is not the same as calling int() on the quotient of |
---|
166 | that number and a large magnitude number. For example, in the following |
---|
167 | Perl code: |
---|
168 | |
---|
169 | my $x = 100000.0; |
---|
170 | my $y = int($x * 1e-5) * 1e5; # '0' |
---|
171 | my $z = int($x / 1e+5) * 1e5; # '100000' |
---|
172 | print "\$y is $y and \$z is $z\n"; # $y is 0 and $z is 100000 |
---|
173 | |
---|
174 | Although one would expect the quantities $y and $z to be the same and equal |
---|
175 | to 100000 they will differ and instead will be 0 and 100000 respectively. |
---|
176 | |
---|
177 | =head2 Using PerlIO and different encodings on ASCII and EBCDIC partitions |
---|
178 | |
---|
179 | Since version 5.8 Perl uses the new PerlIO on BS2000. This enables |
---|
180 | you using different encodings per IO channel. For example you may use |
---|
181 | |
---|
182 | use Encode; |
---|
183 | open($f, ">:encoding(ascii)", "test.ascii"); |
---|
184 | print $f "Hello World!\n"; |
---|
185 | open($f, ">:encoding(posix-bc)", "test.ebcdic"); |
---|
186 | print $f "Hello World!\n"; |
---|
187 | open($f, ">:encoding(latin1)", "test.latin1"); |
---|
188 | print $f "Hello World!\n"; |
---|
189 | open($f, ">:encoding(utf8)", "test.utf8"); |
---|
190 | print $f "Hello World!\n"; |
---|
191 | |
---|
192 | to get two files containing "Hello World!\n" in ASCII, EBCDIC, ISO |
---|
193 | Latin-1 (in this example identical to ASCII) respective UTF-EBCDIC (in |
---|
194 | this example identical to normal EBCDIC). See the documentation of |
---|
195 | Encode::PerlIO for details. |
---|
196 | |
---|
197 | As the PerlIO layer uses raw IO internally, all this totally ignores |
---|
198 | the type of your filesystem (ASCII or EBCDIC) and the IO_CONVERSION |
---|
199 | environment variable. If you want to get the old behavior, that the |
---|
200 | BS2000 IO functions determine conversion depending on the filesystem |
---|
201 | PerlIO still is your friend. You use IO_CONVERSION as usual and tell |
---|
202 | Perl, that it should use the native IO layer: |
---|
203 | |
---|
204 | export IO_CONVERSION=YES |
---|
205 | export PERLIO=stdio |
---|
206 | |
---|
207 | Now your IO would be ASCII on ASCII partitions and EBCDIC on EBCDIC |
---|
208 | partitions. See the documentation of PerlIO (without C<Encode::>!) |
---|
209 | for further posibilities. |
---|
210 | |
---|
211 | =head1 AUTHORS |
---|
212 | |
---|
213 | Thomas Dorner |
---|
214 | |
---|
215 | =head1 SEE ALSO |
---|
216 | |
---|
217 | L<INSTALL>, L<perlport>. |
---|
218 | |
---|
219 | =head2 Mailing list |
---|
220 | |
---|
221 | If you are interested in the VM/ESA, z/OS (formerly known as OS/390) |
---|
222 | and POSIX-BC (BS2000) ports of Perl then see the perl-mvs mailing list. |
---|
223 | To subscribe, send an empty message to perl-mvs-subscribe@perl.org. |
---|
224 | |
---|
225 | See also: |
---|
226 | |
---|
227 | http://lists.perl.org/showlist.cgi?name=perl-mvs |
---|
228 | |
---|
229 | There are web archives of the mailing list at: |
---|
230 | |
---|
231 | http://www.xray.mpe.mpg.de/mailing-lists/perl-mvs/ |
---|
232 | http://archive.develooper.com/perl-mvs@perl.org/ |
---|
233 | |
---|
234 | =head1 HISTORY |
---|
235 | |
---|
236 | This document was originally written by Thomas Dorner for the 5.005 |
---|
237 | release of Perl. |
---|
238 | |
---|
239 | This document was podified for the 5.6 release of perl 11 July 2000. |
---|
240 | |
---|
241 | =cut |
---|