Как мне прочитать записи фиксированной ширины в Perl, используя опцию -0? - PullRequest
0 голосов
/ 05 декабря 2018

Итак, я знаю, что вы можете написать однострочники Perl, которые читают записи, с разделителем записей не по умолчанию с такими опциями, как

perl -064 -ne '#... delimited by @'

Или весь файл в одной строке:

perl -0777 -ne '#... file at once'

Я также знаю, если вы программно установите разделитель записей $\ на ссылку на число, на которое вы можете читать записи фиксированной ширины.

perl -ne '$/ = \10; #... 10 chars at a time'

Но я не могу найти какой-либо рецепт для чтениязаписи фиксированной ширины с использованием опции -0.Это возможно?

1 Ответ

0 голосов
/ 05 декабря 2018

Нет переключателя командной строки.

От perlrun ,

-0 [восьмеричное / шестнадцатеричное]

указывает разделитель входной записи ($/) в виде восьмеричного или шестнадцатеричного числа.Если цифр нет, нулевой символ является разделителем.Другие переключатели могут предшествовать или следовать за цифрами.Например, если у вас есть версия find, которая может печатать имена файлов, оканчивающиеся нулевым символом, вы можете сказать следующее:

find . -name '*.orig' -print0 | perl -n0e unlink

Специальное значение 00 заставит Perl отбрасывать файлы в режиме абзаца.Любое значение 0400 или выше приведет к тому, что Perl будет отбраковывать файлы целиком, но по соглашению обычно используется значение 0777.

Вы также можете указать символ разделителя в шестнадцатеричном формате: -0x ЧЧЧ ... , где H - действительные шестнадцатеричные цифры.В отличие от восьмеричной формы, эта может использоваться для указания любого символа Юникода, даже если он находится за пределами 0xFF.Поэтому, если вы действительно хотите разделитель записей 0777, укажите его как -0x1FF .(Это означает, что вы не можете использовать опцию -x с именем каталога, состоящим из шестнадцатеричных цифр, иначе Perl подумает, что вы указали шестнадцатеричное число для -0 .)

Вы, конечно, можете использовать следующее:

perl -ne'BEGIN { $/ = \10 } ...'

или

perl -e'$/ = \10; while (<>) { ... }'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...