Spec-Zone.ru › Perl 5.30

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 выводит 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 в 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::!) для дополнительных возможностей.

АВТОРЫ

Томас Дорнер

СМОТРИТЕ ТАКЖЕ

УСТАНОВКА, perlport.

Список рассылки

Если вас интересуют порты 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/

ИСТОРИЯ

Этот документ был первоначально написан Томасом Дорнером для выпуска 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.30.3/perlbs2000

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API