perl qr引用正则表达式表现不同

时间:2016-10-24 09:13:56

标签: regex perl

这是我的代码:

my $orderId = "1610209";
$pdfFilename = "1610209_1.pdf";
my $re = qr/^${orderId}_/;
print Dumper($re);

if($pdfFilename =~ $re) {
    print "matched";
}

它'不匹配!! 翻车机打印:$ VAR1 = qr /(?^:^ 1610209 _)/;

可能有什么不对? 我的环境:

perl -v

这是为x86_64-linux-gnu-thread-multi

构建的perl 5,版本18,subversion 2(v5.18.2)

lsb_release -a

分销商ID:Ubuntu 描述:Ubuntu 14.04.2 LTS 发布:14.04 代号:可信赖

3 个答案:

答案 0 :(得分:1)

适合我!™

你在Windows上吗?由于STDOUT(即打印到屏幕上)通常是行缓冲的,因此最终打印不会显示。这意味着它在看到换行符之前不会显示。如果这是程序的最后一行,它可能永远不会在窗口关闭之前显示。

请尝试print "matched\n";

有关详细信息,请阅读Suffering From Buffering

答案 1 :(得分:0)

use strict;
use warnings;

use Data::Dumper;
my $orderId = "1610209";
my $pdfFilename = "1610209_1.pdf";
my $re = qr/^${orderId}_/;

if($pdfFilename =~ $re) {
print "matched Dumper($re)\n";
} else {
print "not matched Dumper ($re)\n";
}

返回

matched Dumper((?^:^1610209))

但是,为什么要使用数据转储器?

use strict;
use warnings;

my $orderId = "1610209";
my $pdfFilename = "1610209_1.pdf";
if($pdfFilename =~ /^$orderId/) {
    print "Matched $orderId with $pdfFilename\n";
} else {
    print "Not Matched $orderId with $pdfFilename\n";
}

答案 2 :(得分:0)

该代码匹配。如果您发现了其他情况,那不是您运行的程序。

您确定实际上没有以下内容吗?

my $orderId = "1610209\n";

chomp行从文件中读取以删除尾随换行符。