У меня есть следующий код Perl:
my $progName = shift ;
open(IPLAYERLIST, "iplayer-list.html") or die "Cannot open iplayer index file iplayer-list.html\n" ;
while (<IPLAYERLIST>) {
if ( /($progName)/is ) {
#if ( /Just A Minute/is ) { <-- This works!
my $iplayerID = $1 ;
print "IPlayer program id for $progName is $iplayerID\n" ;
# === do stuff here ===
}
else
{
print "Failed to match $progName in $_\n";
}
}
IPLAYERLIST - это список BBC IPlayer, поэтому он ищет определенное имя программы.
Если я вызываю это с $progName = "Just A Minute"
, он не совпадает, даже если строка находится в файле. Если я называю это одним символом, например, «M», то это успешно. Если я заменю переменную $progName
на постоянную строку («Just A Minute»), то это будет успешно. Когда он печатает $progName
, он всегда печатает правильную строку, поэтому я не вижу, как регулярное выражение может получить что-то другое.
Я вырезал код и вставил его в тестовый скрипт:
#!/usr/bin/perl
use strict ;
my $searchstr = "foo bar Just A Minute baz boo" ;
my $progName = $ARGV[0] ;
print "searching for [$progName] in [$searchstr]\n" ;
if ( $searchstr =~ /$progName/is ) {
print "Well the test worked\n" ;
} else {
print "Failed to match [$progName] in [$searchstr]\n";
}
и это прекрасно работает. Так почему первый пример не находит «Just A Minute» в файле, содержащем «Just A Minute»?!?!?