ນີ້ແມ່ນຄໍາສັ່ງ perlbs2000 ທີ່ສາມາດດໍາເນີນການໄດ້ໃນ OnWorks ຜູ້ໃຫ້ບໍລິການໂຮດຕິ້ງຟຣີໂດຍໃຊ້ຫນຶ່ງໃນຫຼາຍໆບ່ອນເຮັດວຽກອອນໄລນ໌ຂອງພວກເຮົາເຊັ່ນ Ubuntu Online, Fedora Online, Windows online emulator ຫຼື MAC OS online emulator
ໂຄງການ:
NAME
perlbs2000 - ການກໍ່ສ້າງແລະຕິດຕັ້ງ Perl ສໍາລັບ BS2000.
ເອກະສານນີ້ຕ້ອງໄດ້ຮັບການປັບປຸງ, ແຕ່ພວກເຮົາບໍ່ຮູ້ວ່າມັນຄວນຈະເວົ້າແນວໃດ. ກະລຸນາອີເມລ໌
ຄໍາເຫັນທີ່ perlbug@perl.org <mailto:perlbug@perl.org>.
ສະຫຼຸບສັງລວມ
ເອກະສານນີ້ຈະຊ່ວຍໃຫ້ທ່ານຕັ້ງຄ່າ, ສ້າງ, ທົດສອບແລະຕິດຕັ້ງ Perl ໃນ BS2000 ໃນ POSIX
ລະບົບຍ່ອຍ.
ລາຍລະອຽດ
ນີ້ແມ່ນ ported perl ສໍາລັບລະບົບຍ່ອຍ POSIX ໃນ BS2000 VERSION OSD V3.1A ຫຼືຫຼັງຈາກນັ້ນ. ມັນ
ອາດຈະເຮັດວຽກຢູ່ໃນສະບັບອື່ນໆ, ແຕ່ພວກເຮົາໄດ້ເລີ່ມຕົ້ນ porting ແລະທົດສອບມັນກັບ 3.1A ແລະແມ່ນ
ປະຈຸບັນກໍາລັງໃຊ້ເວີຊັ່ນ V4.0A.
ທ່ານອາດຈະຕ້ອງການໂຄງການ GNU ຕໍ່ໄປນີ້ເພື່ອຕິດຕັ້ງ perl:
gzip on BS2000
ພວກເຮົາໄດ້ນໍາໃຊ້ສະບັບ 1.2.4, ທີ່ສາມາດໄດ້ຮັບການຕິດຕັ້ງອອກຈາກປ່ອງທີ່ມີຄວາມລົ້ມເຫຼວຫນຶ່ງໃນລະຫວ່າງການ
'ເຮັດການກວດສອບ'.
bison on BS2000
yacc ທີ່ມາພ້ອມກັບ BS2000 POSIX ບໍ່ໄດ້ຜົນສໍາລັບພວກເຮົາ. ດັ່ງນັ້ນພວກເຮົາຕ້ອງໃຊ້ bison. ພວກເຮົາຕ້ອງ
ເຮັດການປ່ຽນແປງເລັກນ້ອຍຕໍ່ perl ເພື່ອໃຊ້ຕົວແຍກຄວາມບໍລິສຸດ (reentrant) ຂອງ bison. ພວກເຮົາໃຊ້
ຮຸ່ນ 1.25, ແຕ່ພວກເຮົາຕ້ອງເພີ່ມການປ່ຽນແປງເລັກນ້ອຍເນື່ອງຈາກ EBCDIC. ເບິ່ງຂ້າງລຸ່ມນີ້ສໍາລັບລາຍລະອຽດເພີ່ມເຕີມ
ກ່ຽວກັບ yacc.
ການຫຸ້ມຫໍ່ Perl ການແຜ່ກະຈາຍ on BS2000
ເພື່ອສະກັດ ASCII tar archive ໃນ BS2000 POSIX ທ່ານຈໍາເປັນຕ້ອງມີລະບົບໄຟລ໌ ASCII (ພວກເຮົາໄດ້ໃຊ້
mountpoint /usr/local/ascii ສໍາລັບການນີ້). ຕອນນີ້ທ່ານສະກັດແຟ້ມຈັດເກັບໃນ ASCII
ລະບົບໄຟລ໌ທີ່ບໍ່ມີການແປງ I/O:
cd /usr/local/ascii ສົ່ງອອກ IO_CONVERSION=NO gunzip < /usr/local/src/perl.tar.gz | pax -r
ທ່ານອາດຈະບໍ່ສົນໃຈຂໍ້ຄວາມສະແດງຂໍ້ຜິດພາດສໍາລັບອົງປະກອບທໍາອິດຂອງການເກັບມ້ຽນ (ອັນນີ້ເບິ່ງບໍ່ເຫັນ
ເຊັ່ນ: tar archive / ຂ້າມໄປຫາໄຟລ໌ຕໍ່ໄປ ...), ມັນເປັນພຽງແຕ່ໄດເລກະທໍລີທີ່ຈະເປັນ
ແນວໃດກໍ່ສ້າງໂດຍອັດຕະໂນມັດ.
ຫຼັງຈາກການສະກັດການເກັບຮັກສາທີ່ທ່ານຄັດລອກທັງຫມົດເປັນໄມ້ຢືນຕົ້ນລະບົບໄຟລ໌ EBCDIC ຂອງທ່ານ.
ນີ້ ທີ່ໃຊ້ເວລາ ທ່ານ ການນໍາໃຊ້ ການປ່ຽນ I/O:
cd /usr/local/src IO_CONVERSION=ແມ່ນ cp -r /usr/local/ascii/perl5.005_02 ./
ການລວບລວມ Perl on BS2000
ມີໄຟລ໌ "hints" ສໍາລັບ BS2000 ເອີ້ນວ່າ hints.posix-bc (ເພາະວ່າ posix-bc ແມ່ນຊື່ OS.
ມອບໃຫ້ໂດຍ `uname`) ທີ່ລະບຸຄ່າທີ່ຖືກຕ້ອງສໍາລັບສິ່ງສ່ວນໃຫຍ່. ບັນຫາໃຫຍ່ແມ່ນ
(ແນ່ນອນ) ຊຸດຕົວອັກສອນ EBCDIC. ພວກເຮົາມີສະບັບພາສາເຢຍລະມັນ EBCDIC.
ເນື່ອງຈາກບັນຫາຂອງພວກເຮົາກັບ yacc ພື້ນເມືອງທີ່ພວກເຮົາໃຊ້ GNU bison ເພື່ອສ້າງບໍລິສຸດ
(=reentrant) parser ສໍາລັບ perly.y. ດັ່ງນັ້ນ yacc ຂອງພວກເຮົາແມ່ນແທ້ໆ script ດັ່ງຕໍ່ໄປນີ້:
-----8<-----/usr/local/bin/yacc-----8<----- #! /usr/bin/sh
# Bison as a reentrant yacc:
# save parameters: params="" ໃນຂະນະທີ່ [[$# -gt 1 ]]; ເຮັດ
params="$params $1"
ຍ້າຍແລ້ວ
# ເພີ່ມທຸງ %pure_parser:
tmpfile=/tmp/bison.$$.y echo %pure_parser > $tmpfile cat $1 >> $tmpfile
# ໂທຫາ bison:
echo "/usr/local/bin/bison --yacc $params $1\t\t\t(Pure Parser)" /usr/local/bin/bison
--yacc $params $tmpfile
# ອະນາໄມ:
rm -f $tmpfile -----8<----------8<-----
ພວກເຮົາຍັງໃຊ້ yacc ປົກກະຕິສໍາລັບ a2p.y ເຖິງແມ່ນວ່າ !!! ພວກເຮົາໄດ້ສ້າງ softlink ເອີ້ນວ່າ byacc to
ຈໍາແນກລະຫວ່າງສອງສະບັບ:
ln -s /usr/bin/yacc /usr/local/bin/byacc
ພວກເຮົາສ້າງ perl ໂດຍໃຊ້ GNU make. ພວກເຮົາໄດ້ພະຍາຍາມຜະລິດພື້ນເມືອງຄັ້ງດຽວແລະມັນເຮັດວຽກຄືກັນ.
ການທົດສອບ Perl on BS2000
ພວກເຮົາຍັງມີຂໍ້ຜິດພາດເລັກນ້ອຍໃນລະຫວ່າງການ "ເຮັດການທົດສອບ". ບາງສ່ວນຂອງພວກເຂົາແມ່ນຜົນຂອງການນໍາໃຊ້ bison.
Bison ພິມ ແມ່ບົດ ຄວາມຜິດພາດ ແທນທີ່ syntax ຄວາມຜິດພາດ, ດັ່ງນັ້ນພວກເຮົາອາດຈະບໍ່ສົນໃຈພວກເຂົາ. ຕໍ່ໄປນີ້
ບັນຊີລາຍຊື່ສະແດງໃຫ້ເຫັນຄວາມຜິດພາດຂອງພວກເຮົາ, ຜົນໄດ້ຮັບຂອງທ່ານອາດຈະແຕກຕ່າງກັນ:
op/numconvert....... FAILED ການທົດສອບ 1409-1440 op/regexp........... FAILED ການທົດສອບ 483, 496
op/regexp_noamp.....FAILED ການທົດສອບ 483, 496 pragma/overload.....FAILED ການທົດສອບ 152-153,
170-171 pragma/warnings.....FAILED ການທົດສອບ 14, 82, 129, 155, 192, 205, 207
lib/bigfloat........FAILED tests 351-352, 355 lib/bigfltpm........FAILED tests 354-355,
358 lib/complex.........ການທົດສອບ FAILED 267, 487 lib/dumper.......... FAILED ການທົດສອບ 43, 45
ສະຄຣິບທົດສອບ 11/231 ລົ້ມເຫລວ, 95.24% ຕົກລົງ. 57/10595 ການທົດສອບຍ່ອຍລົ້ມເຫລວ, 99.46% ຕົກລົງ.
ການຕິດຕັ້ງ Perl on BS2000
ພວກເຮົາບໍ່ມີຂໍ້ມູນໃດໆກ່ຽວກັບ BS2000 POSIX (ເທື່ອ), ດັ່ງນັ້ນພວກເຮົາຈຶ່ງບໍ່ສົນໃຈຂໍ້ຜິດພາດໃດໆໃນຂະນະທີ່ຕິດຕັ້ງ.
ເອກະສານ.
ການນໍາໃຊ້ Perl in ໄດ້ Posix-Shell of BS2000
BS2000 POSIX ບໍ່ຮອງຮັບໝາຍເຫດ shebang ("#!/usr/local/bin/perl"), ດັ່ງນັ້ນເຈົ້າຈຶ່ງມີ
ໃຊ້ເສັ້ນຕໍ່ໄປນີ້ແທນ:
: # ໃຊ້ perl
eval 'exec /usr/local/bin/perl -S $0 ${1+"$@"}'
ຖ້າ $running_under_some_shell;
ການນໍາໃຊ້ Perl in "ພື້ນເມືອງ" BS2000
ພວກເຮົາຍັງບໍ່ມີປະສົບການຫຼາຍປານໃດ, ແຕ່ໃຫ້ພະຍາຍາມດັ່ງຕໍ່ໄປນີ້:
ຄັດລອກ Perl ຂອງທ່ານທີ່ສາມາດປະຕິບັດໄດ້ກັບ BS2000 LLM ໂດຍໃຊ້ bs2cp:
"bs2cp /usr/local/bin/perl 'bs2:perl(perl,l)'"
ໃນປັດຈຸບັນທ່ານສາມາດເລີ່ມຕົ້ນມັນດ້ວຍຄໍາສັ່ງ (SDF) ຕໍ່ໄປນີ້:
"/START-PROG FROM-FILE=*MODULE(PERL,PERL),PROG-MODE=*ANY,RUN-MODE=*ADV"
ທໍາອິດທີ່ທ່ານໄດ້ຮັບຄໍາສັ່ງ BS2000 ('*'). ໃນທີ່ນີ້ທ່ານສາມາດໃສ່ຕົວກໍານົດການຂອງທ່ານ,
ຕົວຢ່າງ: "-e 'ພິມ "ສະບາຍດີໂລກ!\n";'" (ໝາຍເຫດ double backslash!) ຫຼື "-w" ແລະຊື່ຂອງ
script Perl ຂອງທ່ານ. ຊື່ໄຟລ໌ທີ່ເລີ່ມຕົ້ນດ້ວຍ "/" ຖືກຄົ້ນຫາຢູ່ໃນລະບົບໄຟລ໌ Posix,
ອື່ນໆແມ່ນຊອກຫາຢູ່ໃນລະບົບໄຟລ໌ BS2000. ເຈົ້າອາດຈະໃຊ້ຕົວແທນໄດ້ ຖ້າເຈົ້າໃສ່ "%"
ຢູ່ຕໍ່ໜ້າຊື່ໄຟລ໌ຂອງທ່ານ (ເຊັ່ນ: "-w checkfiles.pl %*.c"). ອ່ານຄູ່ມື C/C++ ຂອງເຈົ້າສຳລັບ
ຄວາມເປັນໄປໄດ້ເພີ່ມເຕີມຂອງ commandline prompt (ຊອກຫາ PARAMETER-PROMPTING).
floating ຈຸດ ຜິດປົກກະຕິ on BS2000
ປະກົດວ່າມີຂໍ້ບົກພ່ອງໃນການປະຕິບັດຈຸດລອຍຢູ່ໃນລະບົບ BS2000 POSIX
ການເອີ້ນດັ່ງກ່າວ int() ກ່ຽວກັບຜະລິດຕະພັນຂອງຕົວເລກແລະຈໍານວນຂະຫນາດເລັກບໍ່ແມ່ນ
ຄືກັນກັບການໂທ int() ຢູ່ໃນປະລິມານຂອງຕົວເລກນັ້ນ ແລະຕົວເລກຂະໜາດໃຫຍ່. ສໍາລັບ
ຕົວຢ່າງ, ໃນລະຫັດ Perl ຕໍ່ໄປນີ້:
$x ຂອງຂ້ອຍ = 100000.0;
$y ຂອງຂ້ອຍ = int($x * 1e-5) * 1e5; # '0'
$z ຂອງຂ້ອຍ = int($x / 1e+5) * 1e5; # '100000'
ພິມ "\$y ແມ່ນ $y ແລະ \$z ແມ່ນ $z\n"; # $y ແມ່ນ 0 ແລະ $z ແມ່ນ 100000
ເຖິງແມ່ນວ່າຄົນເຮົາຄາດຫວັງວ່າປະລິມານ $y ແລະ $z ຈະຄືກັນ ແລະເທົ່າກັບ 100000 ເຂົາເຈົ້າ.
ຈະແຕກຕ່າງກັນແລະແທນທີ່ຈະເປັນ 0 ແລະ 100000 ຕາມລໍາດັບ.
ການນໍາໃຊ້ PerlIO ແລະ ທີ່ແຕກຕ່າງກັນ ການເຂົ້າລະຫັດ on ASCII ແລະ EBCDIC ຄະແນນ
ນັບຕັ້ງແຕ່ສະບັບ 5.8 Perl ໃຊ້ PerlIO ໃຫມ່ໃນ BS2000. ນີ້ຊ່ວຍໃຫ້ທ່ານໃຊ້ທີ່ແຕກຕ່າງກັນ
ການເຂົ້າລະຫັດຕໍ່ຊ່ອງ IO. ສໍາລັບຕົວຢ່າງ, ທ່ານອາດຈະໃຊ້
ໃຊ້ການເຂົ້າລະຫັດ;
open($f, ">:encoding(ascii), "test.ascii");
ພິມ $f "ສະບາຍດີໂລກ!\n";
open($f, ">:encoding(posix-bc), "test.ebcdic");
ພິມ $f "ສະບາຍດີໂລກ!\n";
open($f, ">:ການເຂົ້າລະຫັດ(ລາຕິນ1), "test.latin1");
ພິມ $f "ສະບາຍດີໂລກ!\n";
open($f, ">:encoding(utf8), "test.utf8");
ພິມ $f "ສະບາຍດີໂລກ!\n";
ເພື່ອເອົາສອງໄຟລ໌ທີ່ມີ "ສະບາຍດີໂລກ!\n" ໃນ ASCII, EBCDIC, ISO Latin-1 (ໃນນີ້
ຕົວຢ່າງດຽວກັນກັບ ASCII) UTF-EBCDIC ຕາມລໍາດັບ (ໃນຕົວຢ່າງນີ້ຄືກັນກັບປົກກະຕິ.
EBCDIC). ເບິ່ງເອກະສານຂອງການເຂົ້າລະຫັດ::PerlIO ສໍາລັບລາຍລະອຽດ.
ຍ້ອນວ່າຊັ້ນ PerlIO ໃຊ້ IO ດິບພາຍໃນ, ທັງຫມົດນີ້ບໍ່ສົນໃຈປະເພດຂອງເຈົ້າ
ລະບົບໄຟລ໌ (ASCII ຫຼື EBCDIC) ແລະຕົວແປສະພາບແວດລ້ອມ IO_CONVERSION. ຖ້າທ່ານຕ້ອງການ
ໄດ້ຮັບການພຶດຕິກໍາທີ່ມີອາຍຸ, ທີ່ BS2000 IO ຫນ້າທີ່ກໍານົດການປ່ຽນແປງໂດຍອີງໃສ່ການ
ລະບົບໄຟລ໌ PerlIO ຍັງເປັນເພື່ອນຂອງເຈົ້າ. ເຈົ້າໃຊ້ IO_CONVERSION ເປັນປົກກະຕິ ແລະບອກ Perl,
ມັນຄວນຈະໃຊ້ຊັ້ນ IO ພື້ນເມືອງ:
ສົ່ງອອກ IO_CONVERSION=YES
ສົ່ງອອກ PERLIO=stdio
ໃນປັດຈຸບັນ IO ຂອງທ່ານຈະເປັນ ASCII ໃນພາທິຊັນ ASCII ແລະ EBCDIC ໃນພາທິຊັນ EBCDIC. ເບິ່ງ
ເອກະສານຂອງ PerlIO (ໂດຍບໍ່ມີການ "ເຂົ້າລະຫັດ::"!) ສໍາລັບຄວາມເປັນໄປໄດ້ເພີ່ມເຕີມ.
AUTHORS
Thomas Dorner
ໃຊ້ perlbs2000 ອອນໄລນ໌ໂດຍໃຊ້ບໍລິການ onworks.net