Это команда perlbs2000, которую можно запустить в бесплатном хостинг-провайдере OnWorks, используя одну из наших многочисленных бесплатных онлайн-рабочих станций, таких как Ubuntu Online, Fedora Online, онлайн-эмулятор Windows или онлайн-эмулятор MAC OS.
ПРОГРАММА:
ИМЯ
perlbs2000 - сборка и установка Perl для BS2000.
Этот документ нужно обновить, но мы не знаем, что в нем должно быть сказано. Пожалуйста, напишите
комментарии к [электронная почта защищена] <MAILTO:[электронная почта защищена]>.
СИНТАКСИС
Этот документ поможет вам настроить, собрать, протестировать и установить Perl на BS2000 в POSIX.
подсистема.
ОПИСАНИЕ
Это перенесенный Perl для подсистемы POSIX в BS2000 VERSION OSD V3.1A или новее. Это
может работать и на других версиях, но мы начали портировать и тестировать его с 3.1A и
в настоящее время используется версия V4.0A.
Для установки perl вам могут понадобиться следующие программы GNU:
GZIP on BS2000
Мы использовали версию 1.2.4, которую можно было установить "из коробки" с одним выходом из строя во время
"сделать чек".
бизон on BS2000
Yacc, поставляемый с BS2000 POSIX, для нас не работал. Поэтому пришлось использовать зубров. Мы должны
сделайте несколько изменений в perl, чтобы использовать чистый (реентерабельный) синтаксический анализатор bison. Мы использовали
версия 1.25, но нам пришлось добавить несколько изменений из-за EBCDIC. Подробности смотрите ниже
по поводу yacc.
Распаковка Perl Распределение on BS2000
Чтобы извлечь tar-архив ASCII на BS2000 POSIX, вам понадобится файловая система ASCII (мы использовали
точка монтирования / usr / local / ascii для этого). Теперь вы распаковываете архив в формате ASCII.
файловая система без преобразования ввода / вывода:
cd / usr / local / ascii export IO_CONVERSION = NO gunzip </usr/local/src/perl.tar.gz | pax -r
Вы можете проигнорировать сообщение об ошибке для первого элемента архива (это не выглядит
как tar-архив / переход к следующему файлу ...), это только каталог, который будет
в любом случае создается автоматически.
После распаковки архива вы копируете все дерево каталогов в файловую систему EBCDIC.
Эти время использование I / O-преобразование:
cd / USR / местные / SRC IO_CONVERSION = ДА cp -r /usr/local/ascii/perl5.005_02 ./
составление Perl on BS2000
Для BS2000 существует файл "подсказок", который называется hints.posix-bc (потому что posix-bc - это имя ОС.
дается `uname`), который определяет правильные значения для большинства вещей. Основная проблема в том, что
(конечно) набор символов EBCDIC. У нас есть немецкая версия EBCDIC.
Из-за наших проблем с нативным yacc мы использовали GNU bison для генерации чистого
(= реентерабельный) парсер для perly.y. Итак, наш yacc - это действительно следующий скрипт:
----- 8 <----- / usr / local / bin / yacc ----- 8 <----- #! / usr / bin / sh
# Bison как реентерабельный yacc:
# сохраняем параметры: params = "" while [[$ # -gt 1]]; делать
params = "$ params $ 1"
смена сделана
# добавить флаг% pure_parser:
tmpfile = / tmp / bison. $$. y echo% pure_parser> $ tmpfile cat $ 1 >> $ tmpfile
# вызов зубров:
echo "/ usr / local / bin / bison --yacc $ params $ 1 \ t \ t \ t (Чистый парсер)" / usr / local / bin / bison
--yacc $ params $ tmpfile
# очистка:
rm -f $ tmpfile ----- 8 <---------- 8 <-----
Мы по-прежнему используем обычный yacc для a2p.y !!! Мы сделали софтлинк под названием byacc to
различают две версии:
ln -s / usr / bin / yacc / usr / local / bin / byacc
Мы собираем Perl с помощью GNU make. Мы однажды попробовали родной make, и он тоже сработал.
Тестирование Perl on BS2000
У нас все еще есть несколько ошибок во время "make test". Некоторые из них - результат использования зубров.
Отпечатки зубров синтаксический анализатор ошибка вместо синтаксис ошибка, поэтому мы можем их игнорировать. Следующий
В списке показаны наши ошибки, ваши результаты могут отличаться:
op / numconvert ....... НЕОБХОДИМЫЕ тесты 1409-1440 op / regexp ........... FAILED тесты 483, 496
op / regexp_noamp ..... FAILED тесты 483, 496 pragma / overload ..... FAILED тесты 152-153,
170-171 прагма / предупреждения ..... НЕ ВЫПОЛНЕНЫ тесты 14, 82, 129, 155, 192, 205, 207
lib / bigfloat ........ ВЫПОЛНЕННЫЕ тесты 351-352, 355 lib / bigfltpm ........ НЕУДАЧНЫЕ тесты 354-355,
358 lib / complex ......... FAILED тесты 267, 487 lib / dumper .......... FAILED тесты 43, 45
Неудачные тестовые сценарии 11/231, 95.24% в порядке. 57/10595 субтестов не прошли, 99.46% в порядке.
Установка Perl on BS2000
У нас нет nroff на 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 'print" Hello World! \\ n ";'" (обратите внимание на двойную обратную косую черту!) или "-w" и имя
ваш Perl-скрипт. Имена файлов, начинающиеся с "/", ищутся в файловой системе Posix,
другие ищутся в файловой системе BS2000. Вы даже можете использовать подстановочные знаки, если поставите "%"
перед вашим именем файла (например, "-w checkfiles.pl% *. c"). Прочтите ваше руководство по C / C ++ для
дополнительные возможности командной строки (ищите PARAMETER-PROMPTING).
Плавающий точка аномалии on BS2000
Похоже, есть ошибка в реализации с плавающей запятой в системах BS2000 POSIX.
такой, что зовет int () на произведении числа и небольшого числа не является
то же самое, что и звонок int () на частное этого числа и большого числа величины. Для
Например, в следующем коде Perl:
мой $ x = 100000.0;
мой $ y = int ($ x * 1e-5) * 1e5; # '0'
мой $ z = int ($ x / 1e + 5) * 1e5; # '100000'
print "\ $ y равно $ y, а \ $ z равно $ z \ n"; # $ y равно 0, а $ z равно 100000
Хотя можно было бы ожидать, что величины $ y и $ z будут одинаковыми и равными 100000, они
будет отличаться и вместо этого будет 0 и 100000 соответственно.
. ПерлиО и различный кодировок on ASCII и EBCDIC множество
Начиная с версии 5.8 Perl использует новый PerlIO на BS2000. Это позволяет использовать разные
кодировок на канал ввода-вывода. Например, вы можете использовать
используйте Encode;
open ($ f, ">: кодировка (ascii)", "test.ascii");
print $ f "Hello World! \ n";
open ($ f, ">: кодировка (posix-bc)", "test.ebcdic");
print $ f "Hello World! \ n";
open ($ f, ">: кодировка (latin1)", "test.latin1");
print $ f "Hello World! \ n";
open ($ f, ">: кодировка (utf8)", "test.utf8");
print $ f "Hello World! \ n";
чтобы получить два файла, содержащие "Hello World! \ n" в ASCII, EBCDIC, ISO Latin-1 (в этом
пример идентичен ASCII) соответствующий UTF-EBCDIC (в этом примере идентичен нормальному
EBCDIC). Подробности смотрите в документации Encode :: PerlIO.
Поскольку уровень PerlIO внутренне использует необработанный ввод-вывод, все это полностью игнорирует тип вашего
файловая система (ASCII или EBCDIC) и переменная среды IO_CONVERSION. Если хотите
получить старое поведение, что функции ввода-вывода BS2000 определяют преобразование в зависимости от
файловая система PerlIO по-прежнему ваш друг. Вы используете IO_CONVERSION как обычно и говорите Perl,
что он должен использовать собственный уровень ввода-вывода:
экспорт IO_CONVERSION = ДА
экспорт PERLIO = stdio
Теперь ваш IO будет ASCII для разделов ASCII и EBCDIC для разделов EBCDIC. Увидеть
документация PerlIO (без "Encode ::"!) для дальнейших возможностей.
АВТОРЫ
Томас Дорнер
Используйте perlbs2000 онлайн с помощью сервисов onworks.net