В сопоставлении с шаблоном perl .. как исключить символ \ n из шаблона - PullRequest
1 голос
/ 21 сентября 2011

Я новичок в Perl и пишу свои первые несколько программ и использую его способности сопоставления с образцом. Я читаю файл в массив, как это:

@list=<file>

Затем индексируем каждую строку массива с помощью $ list [0..9] и т. Д., И когда я сопоставляю ее с шаблоном, $list[0] включает символ \n, следовательно, сопоставление не выполняется. Таким образом, если ($string =~ $list[0]) завершится неудачно, хотя без шаблона \n в шаблоне, он будет соответствовать.

Как сказать шаблону сопоставления не учитывать символ \n из шаблона?

Спасибо

Ответы [ 4 ]

4 голосов
/ 21 сентября 2011

Вы можете сбрить концы строк из массива после прочтения:

@lines = …;
chomp @lines;

Теперь @lines содержит строки без концов строк.Подробнее см. perldoc chomp.

1 голос
/ 21 сентября 2011

Это хорошая возможность узнать, как работают модули Perl.

Например, вы можете использовать Perl6 :: Slurp , который будет а) анализировать файл; б) помещать содержимое в массив; в) удалять символы новой строки.

Например:

use Perl6::Slurp;
my @lines = slurp '<:utf8', 'filename', {chomp=>"\n"}
1 голос
/ 21 сентября 2011

Если вы хотите удалить \n из ваших строк, вы можете:

chomp $list[0]

подробности см. perldoc -f chomp.

0 голосов
/ 21 сентября 2011

Это будет соответствовать \n:

if ( $list[0] =~ "$string\n")

Или, если вы хотите, чтобы \ n был необязательным:

if ( $list[0] =~ /$string\n?/ )
...