Я хотел бы получить подстроку между двумя разделителями (регулярными выражениями) из строки.Я хочу использовать это:
while (<>) { if (/START/../END/) { next if /START/ || /END/; print; } }
Но это работает на линии стандартного ввода.Я хотел бы, чтобы это работало на строках строки.Как?
Если вы хотите обработать строку, которая уже содержит несколько строк, используйте split:
foreach (split(/\n/, $str)) { if (/START/../END/) { next if /START/ || /END/; print; } }
Просто:
my ($between) = $string =~ /START(.*?)END/s;
В качестве альтернативы читайте из строки:
use 5.010; open my $string_fh, "<", \$string or die "Couldn't open in-memory file: $!"; while ( <$string_fh> ) { ...
Есть много способов получить многострочные данные в строку. Если вы хотите, чтобы это происходило автоматически при чтении ввода, вам нужно установить $/ (вероятно, '' для абзацев или undef для всего файла), чтобы позволить вам читать более одной строки за раз.
$/
см. Раздел «Многострочный» @ perldoc