Есть ли что-нибудь в ядре Perl для авто-chomp строк из оператора "<>"?
Одна из незначительных неприятностей, которые я испытываю при кодировании Perl, - это необходимость запоминать строку, которую вы читаете с ввода. Да, после многих лет кодирования он почти автоматически запоминал это, но STILL раздражает.
Есть ли в Perl (сильно предпочтительные модули Core) какая-либо прагма, модуль или что-то еще, что автоматически перебирает каждую строку, используя оператор <>
?
Ответы
Ответ 1
Помимо испрашиваемых фильтров источника, которые вы уже упоминали, я боюсь, что не знаю, что считается "взломом" для ваших целей здесь. Считаете ли вы, что любое из этих очевидных решений - "хаки"?
- переопределение
*CORE::readline
в текущем пакете
- переопределение
*CORE::GLOBAL::readline
во всех пакетах
- связывает связь с классом с помощью настраиваемого метода
READLINE
- перегрузка оператора оператора
<>
Вы уже пробовали их?
Из них я бы подумал, что первый, или, возможно, второй, скорее всего будет делать то, что вы хотите, с наименьшим количеством суеты.
Обратите внимание, что все четыре из этих решений не требуют ничего, кроме чистого Perl и ничего другого. Они даже не требуют каких-либо модулей ядра, не говоря уже о каких-либо модулях CPAN.
Ответ 2
Я предполагаю, что вы это уже знаете, но когда вы комбинируете параметры командной строки -nl
вместе, вы получаете нужное поведение (если вы хотите неявный цикл while(<>)
:
$ perl -nle 'printf q{%s}, $_'
Обычно эти два параметра используются для выполнения короткой команды perl с помощью командной строки bash, но я думаю, что ничто не мешает вам сделать это в script:
#!/usr/bin/perl -nl
# puts the newline back on if you use print:
# print
# does not put the newline back on
printf '%s', $_;
Краткое описание этого поведения здесь: http://www.perlmonks.org/?node_id=324749