我有以下简单的代码段(被识别为问题代码段,并从一个更大的程序中提取)。
是我还是你能在这段代码中看到一个明显的错误,它阻止了它与$variable
匹配,并在它确实应该做的时候打印$found
?
当我尝试打印$variable
时,不会打印任何内容,并且在我使用的文件中肯定有匹配的行。
代码:
if (defined $var) {
open (MESSAGES, "<$messages") or die $!;
my $theText = $mech->content( format => 'text' );
print "$theTextn";
foreach my $variable (<MESSAGES>) {
chomp ($variable);
print "$variablen";
if ($theText =~ m/$variable/) {
print "FOUNDn";
}
}
}
我已经将其定位为错误发生的点,但无法理解为什么?可能有什么事情我完全忽略了,因为它已经很晚了?
更新我后来意识到我误解了你的问题,这可能无法解决问题。然而,这些观点是有效的,所以我把它们留在这里。
$variable
中可能有正则表达式元字符。线路
if ($theText =~ m/$variable/) { ... }
应该是
if ($theText =~ m/Q$variable/) { ... }
以逃避任何存在。
但你确定你不只是想要eq
吗?
此外,您应该使用读取文件
while (my $variable = <MESSAGES>) { ... }
因为CCD_ 6循环将不必要地将整个文件读取到存储器中。并且请使用比$variable
更好的名称。
这对我有用。我是不是错过了手头的问题?您只是想将"$Text"与文件中每行的任何内容相匹配,对吗?
#!/usr/bin/perl
use warnings;
use strict;
my $fh;
my $filename = $ARGV[0] or die "$0 filenamen";
open $fh, "<", $filename;
my $match_text = "whatever";
my $matched = '';
# I would use a while loop, out of habit here
#while(my $line = <$fh>) {
foreach my $line (<$fh>) {
$matched =
$line =~ m/$match_text/ ? "Matched" : "Not matched";
print $matched . ": " . $line;
}
close $fh
./test.pl testfile
Not matched: this is some textfile
Matched: with a bunch of lines or whatever and
Not matched: whatnot....
编辑:啊,我明白了。。你为什么不试着在"chomp()"之前和之后打印,看看你得到了什么?这不应该是问题所在,但测试每个案例并没有坏处。。