来自正则表达式的Perl字符串与创建的字符串不同 - 中断fgrep

时间:2015-04-10 15:38:35

标签: regex perl grep

我有一段代码正在检查文件中的文件名是否存在于主列表中,但它一直说字符串不存在 - 但是如果我声明第二个变量的文件名是它 - 手动输入 - 它工作正常。

来自正则表达式的变量与我声明的变量不同(它们看起来相同)。我检查过这个,但是使用Perl的自动类型解析我无法理解问题所在。

...
open (my $fh_in, $in_file) or die "Could not open file $in_file $!";

seek ($fh_in, 5995, 0);
my $line = readline ($fh_in);
$line =~ /"([^"]*)"/;  # extracts the filename from a Filename="..." field
my $adf_file = $1;

if (fgrep { /$adf_file/ } "masterlist.txt" ) {
  print "The file is in the master list\n";
} else {
  print "It isn't\n";
}

它表示该文件不在主列表中。 如果我改为:

my $testst = "File_I_Want";

fgrep { /$testst/ }   ...

它说文件在主列表中。

如果我然后比较:

if ($testst eq $adf_file) {
  print "variables are the same\n";
} else {
  print "variables are not the same\n";
}

打印时它们有所不同,但它们看起来完全相同。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

如果添加

,将有助于查看两个字符串之间的差异
use Data::Dumper;
$Data::Dumper::Useqq = 1;
print Dumper $adf_file;

设置Useqq选项会使Data::Dumper以双引号样式显示字符串,并使用所有不可打印字符的转义序列。

更好的是Data::Dump,只需要

use Data::Dump;
dd $adf_file;

做同样的事情。它还可以生成更加易读的嵌套数据结构显示,但它不是一个核心模块,可能需要安装。