Подтвердить что ты не робот

Есть ли что-нибудь в ядре Perl для авто-chomp строк из оператора "<>"?

Одна из незначительных неприятностей, которые я испытываю при кодировании Perl, - это необходимость запоминать строку, которую вы читаете с ввода. Да, после многих лет кодирования он почти автоматически запоминал это, но STILL раздражает.

Есть ли в Perl (сильно предпочтительные модули Core) какая-либо прагма, модуль или что-то еще, что автоматически перебирает каждую строку, используя оператор <>?

4b9b3361

Ответ 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