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.
Этот документ нуждается в обновлении, но нам неизвестно, что в нём должно быть. Пожалуйста, отправляйте комментарии на perlbug@perl.org.
СИНОПСИС
Этот документ поможет вам настроить, скомпилировать, протестировать и установить Perl на BS2000 в POSIX-подсистеме.
ОПИСАНИЕ
Это портированная версия Perl для POSIX-подсистемы в BS2000 VERSION 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
Для извлечения ASCII-архива tar на 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(Pure Parser)" /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 выводит parser error вместо syntax error, поэтому мы можем их проигнорировать. Следующий список показывает наши ошибки, ваши результаты могут отличаться:
op/numconvert.......FAILED tests 1409-1440 op/regexp...........FAILED tests 483, 496 op/regexp_noamp.....FAILED tests 483, 496 pragma/overload.....FAILED tests 152-153, 170-171 pragma/warnings.....FAILED tests 14, 82, 129, 155, 192, 205, 207 lib/bigfloat........FAILED tests 351-352, 355 lib/bigfltpm........FAILED tests 354-355, 358 lib/complex.........FAILED tests 267, 487 lib/dumper..........FAILED tests 43, 45 Failed 11/231 test scripts, 95.24% okay. 57/10595 subtests failed, 99.46% okay.
Установка 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 в LLM BS2000, используя 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::!) для других возможностей.
АВТОРЫ
Thomas Dorner
СМОТРИТЕ ТАКЖЕ
Список рассылки
Если вы заинтересованы в портах Perl для z/OS (ранее известного как OS/390) и POSIX-BC (BS2000), обратитесь к списку рассылки perl-mvs. Чтобы подписаться, отправьте пустое сообщение на perl-mvs-subscribe@perl.org.
См. также:
http://lists.perl.org/list/perl-mvs.html Архивы веб-сайта списка рассылки находятся по адресу:
http://www.xray.mpe.mpg.de/mailing-lists/perl-mvs/
http://archive.develooper.com/perl-mvs@perl.org/ ИСТОРИЯ
Этот документ был первоначально написан Thomas Dorner для выпуска 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.28.3/perlbs2000