Я подозреваю, что ваши проблемы связаны с неиспользованием:
use strict;
use warnings;
в вашем скрипте.
Прежде всего, строки в ваших первых двух утверждениях, $currentSearch
и $currentLine
, не имеют кавычек вокруг них. Это, вероятно, опечатка, но выглядит странно.
Во-вторых, в своем операторе if вы называете их массивами, а не скалярами. Предположим, что это не очередная опечатка, которая может стать источником вашей проблемы. $currentSearch
и $currentSearch[$i]
относятся к двум совершенно различным переменным.
Без строгих предупреждений и даже использования двух необъявленных и неопределенных переменных не вызовет никаких признаков того, что что-то не так.
На самом деле это:
perl -e 'if ($foo[0]=~ /$bar[1]/) { print "sure, why not?" }'
Фактически будет успешным совпадением и выведет строку, даже если обе переменные @foo
и @bar
полностью пусты. С strict
и warnings
он рухнет и сгорит, как и должен.
В любом случае, это работает:
my $cs = "DNA/3/44.com/index.html";
my $cl = "Load DNA/3/44.com/index.html .....(3)";
if ( $cl =~ /Load\s+$cs[\s\.]+\((\d+)\)/ ) {
print "Yes: $1\n";
} else { print "Nope!" }
Если у вас есть какие-либо метасимволы в строке поиска, это может затруднить обнаружение ошибок, в этом случае вы можете попытаться добавить quotemeta
в строку поиска.