Regex 奇怪的perl行为。口吃与任务

Regex 奇怪的perl行为。口吃与任务,regex,perl,scalar,slurp,Regex,Perl,Scalar,Slurp,我在perl中遇到了一些奇怪的东西,我想与大家分享一下。我有一个名为“testfile.txt”的文本文件 在这里 BLAH BLAH BLAH BLAH BLAH The dollar amount is $2.30 today BLAH BLAH BLAH BLAH BLAH 现在我想提取2.30。在我下面的示例中,我正在对文件进行slurp处理,效果很好。第二种方式根本不起作用。这口吃有什么魔力吗 #!/usr/local/bin/perl ## THIS WORKS my $cont

我在perl中遇到了一些奇怪的东西,我想与大家分享一下。我有一个名为“testfile.txt”的文本文件

在这里

BLAH BLAH BLAH BLAH BLAH
The dollar amount is $2.30 today
BLAH BLAH BLAH BLAH BLAH
现在我想提取2.30。在我下面的示例中,我正在对文件进行slurp处理,效果很好。第二种方式根本不起作用。这口吃有什么魔力吗

#!/usr/local/bin/perl

## THIS WORKS
my $content;
my $filename = "testfile.txt";
my $fh="FILEIN";
open(my $fh, '<', $filename) or die "cannot open file $filename";
{
   local $/;
   $content = <$fh>;
}
close($fh);
my $price;
($price)=$content=~m{is\s\$([0-9]{1,2}\.[0-9]{2})\stoday};
print "Result is $price\n"; #Correctly produces 2.30

## DOESN'T WORK

$content2="BLAH BLAH BLAH BLAH BLAH The dollar amount is $2.30 today BLAH BLAH BLAH BLAH BLAH";
my $price2;
($price2)=$content2=~m{is\s\$([0-9]{1,2}\.[0-9]{2})\stoday};
print "Result is $price2\n"; #Doesn't work
#/usr/local/bin/perl
##这很有效
我的$content;
my$filename=“testfile.txt”;
我的$fh=“FILEIN”;
打开(我的$fh,'
由于字符串是双引号,因此将
$2
替换为Perl变量
$2
的值-这是最后一个正则表达式匹配的第二个括号子表达式的内容,但重要的是它不是您想要的。请改为使用单引号:

$content2='BLAH BLAH BLAH BLAH BLAH The dollar amount is $2.30 today BLAH BLAH BLAH BLAH BLAH'
由于字符串是双引号,因此将
$2
替换为Perl变量
$2
的值-这是最后一个正则表达式匹配的第二个括号子表达式的内容,但重要的是它不是您想要的。请改为使用单引号:

$content2='BLAH BLAH BLAH BLAH BLAH The dollar amount is $2.30 today BLAH BLAH BLAH BLAH BLAH'

mpapec做到了!这正是我想要的。@JaneWIlkie这与
$content2='BLAH..';
是一样的(注意单引号中没有插入$foo/$2/etc变量)对于积极的Perl学习,您应该访问Perl.misc新闻组。加速学习!mpapec做到了!这正是我想要的。@JaneWIlkie这与
$content2='BLAH..';
是一样的(注意单引号中不插入$foo/$2/etc变量)对于积极的Perl学习,您应该访问Perl.misc新闻组。加速学习!
$2
是第二个captureRight,因为
$0
argv[0]
。感谢您的更正。
$2
是第二个captureRight,因为
$0
argv[0]
。感谢您的更正。