Есть ли менее утомительный способ использовать Perl Chomp? - PullRequest
0 голосов
/ 14 ноября 2018

Очень часто мне приходится делать:

#similarly in while (my $val = <$fh>){...}
my $val = <$fh>;
chomp $val;

my $res = `command`;
chomp $res;

Я бы предпочел пропустить вторую строку, если бы мог.Я вижу, что я могу использовать опцию -l в моей строке shebang на основе: Есть ли что-нибудь в ядре Perl для строк авто-chomp из оператора "<>"?

Есть ли что-то подобноедля спины?Или, альтернативно, есть ли способ сжать inline, который является менее многословным?

Ответы [ 3 ]

0 голосов
/ 14 ноября 2018

Еще один способ уменьшить утомление - научиться любить $_

while(<$fh>) {
   chomp;
}

local $_ = <$fh>;
chomp;

local $_ = `command`;
chomp;

Столько же строк, но теперь они в два раза длиннее :) 1005 *

edit: исправлено благодаря комментарию @ ysth, сегодня узнал что-то новое

0 голосов
/ 14 ноября 2018
sub chomper(_) {
   my ($line) = @_;
   chomp($line) if defined($line);
   return $line;
}

while (defined( my $line = chomper(<>) )) {
   ...
}
0 голосов
/ 14 ноября 2018

Вы можете обернуть chomp вокруг всего выражения.

chomp(my $date = `date`);
say $date;

. Другие предложения относительно своего рода "auto-chomp" для файловых дескрипторов см. В этом ответе.

Обновление : есть также модуль Backtick::AutoChomp, который реализован с фильтром источника.

РЕДАКТИРОВАТЬ

Первоначально у меня также был следующий фрагмент, не проверяв его на самом деле

while (chomp(my $line = <$fh>)) {
    say $line;
}

Согласно комментарию ikegami, это ненадежно и будет вести себя неправильно по-разному.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...