| 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 | 
|---|