Я пытаюсь постоянно затягивать растущий файл и использовать регулярное выражение для извлечения информации, когда новые строки добавляются в файл, но $1
не похоже, нравится.
Код
#!/usr/bin/perl
$| = 1;
use strict;
use warnings;
use File::Tail;
my $file=File::Tail->new(
name=>"sample.txt",
maxinterval=>1,
interval=>0.05);
while (defined(my $line=$file->read))
{
chomp($line);
print "$line\n";
if ($line =~ m/ls/)
{
print $1;
print "MATCH\n";
}
}
ввода в sample.txt, вошел в Баш оболочки
echo "test1" >> sample.txt
echo "test2" >> sample.txt
echo "test3" >> sample.txt
echo "testls4 >> sample.txt
Выход
test1
test2
test3
testls4
Use of uninitialized value $1 in print at test.pl line 19.
MATCH
ясно, есть совпадение, так как MATCH
отображался на выход, но почему $1
все еще не инициализирован? Как ни странно, вне цикла while
, у меня нет никаких проблем с $1
В regexp '/ ls /' нет групп захвата, поэтому, конечно, '$ 1',' $ 2' и т. Д. Не определены после того, как это удастся. Что вы ожидали найти в '$ 1'? –