Есть ли у кого-нибудь решение задачи обработки многострочной строки по одной строке за раз, кроме решения строки-как-файла, показанного ниже?Как я могу избежать Perl :: Критические предупреждения при обработке многострочной строки с помощью дескриптора файла?
my $multiline_string = "line one\nline two\nline three\nline four";
my $filehandle;
open($filehandle, '<', \$multiline_string)
or croak("Can't open multi-line string as a filehandle: $!");
while (defined (my $single_line = <$filehandle>)) {
# do some processing of $single_line here ...
}
close($filehandle);
Причина, по которой я не хочу использовать дескриптор файла, довольно слаба. Test :: Perl :: Критические крики, когда у меня есть более 10 строк исходного кода между моей командой open и моей командой закрытия на любом дескрипторе файла. Я занимаюсь обработкой $ single_line, поэтому на самом деле у меня около 40 строк кода между моим открытым вызовом и моим закрытым звонком, и я не вижу никакого способа довести это до 10.
И я на самом деле не хочу игнорировать тест Perl :: Critic в моей сборке, потому что это действительно достойный тест, который я бы хотел передать всякий раз, когда я открываю фактический файл на диске в своем коде.
Если '$ multiline_string' велико, список, возвращаемый' split', будет еще больше и победит по очереди на обработку '$ multiline_string'. Либо используйте регулярное выражение для соответствия строкам по одному, либо отменяйте работу, которую вы выполняете подпрограмме.Я лично предпочел бы последнее. –
ничего себе. как глупо мне не думать об обходном пути подпрограммы. иногда я просто ничего не думаю. :-) –