Spec-Zone.ru › Perl 5.36

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 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

Чтобы извлечь архив 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.......НЕ УСПЕШНО тесты 1409-1440 op/regexp...........НЕ УСПЕШНО тесты 483, 496 op/regexp_noamp.....НЕ УСПЕШНО тесты 483, 496 pragma/overload.....НЕ УСПЕШНО тесты 152-153, 170-171 pragma/warnings.....НЕ УСПЕШНО тесты 14, 82, 129, 155, 192, 205, 207 lib/bigfloat........НЕ УСПЕШНО тесты 351-352, 355 lib/bigfltpm........НЕ УСПЕШНО тесты 354-355, 358 lib/complex.........НЕ УСПЕШНО тесты 267, 487 lib/dumper..........НЕ УСПЕШНО тесты 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 0; # ^ Запуск только в оболочке

Использование 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.

См. также:

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–2021 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.36.0/perlbs2000

Spec-Zone.ru

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