perlbs2000
СОДЕРЖАНИЕ
- НАЗВАНИЕ
- СИНОПСИС
- ОПИСАНИЕ
- gzip на BS2000
- bison на BS2000
- Распаковка дистрибутива Perl на BS2000
- Компиляция Perl на BS2000
- Тестирование Perl на BS2000
- Установка Perl на BS2000
- Использование Perl в POSIX-оболочке BS2000
- Использование Perl в "родном" BS2000
- Аномалии с плавающей точкой на BS2000
- Использование PerlIO и различных кодировок на разделах ASCII и EBCDIC
- АВТОРЫ
- СМОТРИТЕ ТАКЖЕ
- ИСТОРИЯ
НАЗВАНИЕ
perlbs2000 - создание и установка Perl для BS2000.
Этот документ необходимо обновить, но мы не знаем, что в нём должно быть. Пожалуйста, отправляйте комментарии на https://github.com/Perl/perl5/issues.
СИНОПСИС
Этот документ поможет вам настроить, скомпилировать, протестировать и установить Perl на BS2000 в POSIX-подсистеме.
ОПИСАНИЕ
Это портированная версия Perl для POSIX-подсистемы в BS2000 версии OSD V3.1A или более поздней. Она может работать и на других версиях, но мы начали портирование и тестирование с версии 3.1A и в настоящее время используем версию V4.0A.
Для установки Perl вам могут потребоваться следующие программы GNU:
gzip на BS2000
Мы использовали версию 1.2.4, которую можно установить из коробки с одной ошибкой при выполнении 'make check'.
bison на BS2000
Yacc, поставляемый с BS2000 POSIX, не работал для нас. Поэтому нам пришлось использовать bison. Нам пришлось внести несколько изменений в Perl, чтобы использовать чистый (рекурсивный) анализатор bison. Мы использовали версию 1.25, но нам пришлось внести несколько изменений из-за EBCDIC. См. ниже подробности о yacc.
Распаковка дистрибутива Perl на 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. На этот раз используйте преобразование ввода-вывода:
cd /usr/local/src IO_CONVERSION=YES cp -r /usr/local/ascii/perl5.005_02 ./
Компиляция Perl на 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 ]]; do params="$params $1" shift done
# добавить флаг %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(Чистый анализатор)" /usr/local/bin/bison --yacc $params $tmpfile
# очистка:
rm -f $tmpfile -----8<----------8<-----
Мы по-прежнему используем обычный yacc для a2p.y! Мы создали символическую ссылку под названием byacc, чтобы отличить две версии:
ln -s /usr/bin/yacc /usr/local/bin/byacc
Мы компилируем Perl с помощью GNU make. Мы пробовали родной make и он тоже работал.
Тестирование Perl на BS2000
Мы по-прежнему получили несколько ошибок во время make test. Некоторые из них являются результатом использования bison. Bison выводит ошибку анализатора вместо синтаксической ошибки, поэтому мы можем их проигнорировать. Следующий список показывает наши ошибки, ваши результаты могут отличаться:
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 тесты 351-352, 355 lib/bigfltpm........FAILED тесты 354-355, 358 lib/complex.........FAILED тесты 267, 487 lib/dumper..........FAILED тесты 43, 45 Неудалось 11/231 тестовых скриптов, 95.24% успешно. 57/10595 подтестов не удалось, 99.46% успешно.
Установка Perl на BS2000
У нас нет nroff на BS2000 POSIX (еще нет), поэтому мы проигнорировали любые ошибки при установке документации.
Использование Perl в POSIX-оболочке BS2000
BS2000 POSIX не поддерживает обозначение shebang (#!/usr/local/bin/perl), поэтому вместо этого нужно использовать следующие строки:
: # use perl eval 'exec /usr/local/bin/perl -S $0 ${1+"$@"}' if $running_under_some_shell;
Использование Perl в "родном" 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).
Аномалии с плавающей точкой на BS2000
По-видимому, существует ошибка в реализации плавающей точки на системах BS2000 POSIX, из-за которой вызов int() от произведения числа и числа малой величины не эквивалентен вызову int() от частного этого числа и числа большой величины. Например, в следующем коде Perl:
my $x = 100000.0;
my $y = int($x * 1e-5) * 1e5; # '0'
my $z = int($x / 1e+5) * 1e5; # '100000'
print "\$y is $y and \$z is $z\n"; # $y is 0 and $z is 100000 Хотя можно ожидать, что величины $y и $z будут одинаковыми и равными 100000, они будут отличаться, и вместо этого будут равны 0 и 100000 соответственно.
Использование PerlIO и различных кодировок на разделах ASCII и EBCDIC
Начиная с версии 5.8, Perl использует новый PerlIO на BS2000. Это позволяет использовать разные кодировки для каждого канала ввода-вывода. Например, вы можете использовать
use Encode;
open($f, ">:encoding(ascii)", "test.ascii");
print $f "Hello World!\n";
open($f, ">:encoding(posix-bc)", "test.ebcdic");
print $f "Hello World!\n";
open($f, ">:encoding(latin1)", "test.latin1");
print $f "Hello World!\n";
open($f, ">:encoding(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, что он должен использовать родной слой ввода-вывода:
export IO_CONVERSION=YES
export PERLIO=stdio Теперь ваш ввод-вывод будет ASCII на разделах ASCII и EBCDIC на разделах EBCDIC. Дополнительные возможности см. в документации PerlIO (без Encode::!).
АВТОРЫ
Томас Дорнер
СМОТРИТЕ ТАКЖЕ
Список рассылки
Если вы заинтересованы в портах Perl для z/OS (ранее известного как OS/390) и POSIX-BC (BS2000), посетите список рассылки perl-mvs. Чтобы подписаться, отправьте пустое сообщение на perl-mvs-subscribe@perl.org.
См. также:
https://lists.perl.org/list/perl-mvs.html Веб-архивы списка рассылки находятся по адресам:
https://www.nntp.perl.org/group/perl.mvs/ ИСТОРИЯ
Этот документ был первоначально написан Томасом Дорнером для выпуска Perl 5.005.
Этот документ был изменен для релиза perl 5.6 11 июля 2000 года.
© 1993–2020 Larry Wall and others
Licensed under the GNU General Public License version 1 or later, or the Artistic License.
The Perl logo is a trademark of the Perl Foundation.
https://perldoc.perl.org/5.32.0/perlbs2000