use strict;
my $type = "build";
if ($type =~ (/build|test/))
{
print "type=$1";
}
我希望它能打印“type = build”,但$ 1什么都没有,它打印出“type =”,我做错了什么?
答案 0 :(得分:2)
看起来你没有用括号捕捉任何东西,
perl -MO=Deparse -e'
use strict;
my $type = "build";
if ($type =~ (/build|test/))
{
print "type=$1";
}
'
输出
use strict;
my $type = 'build';
if ($type =~ /build|test/) {
print "type=$1";
}
但/(build|test)/
应完全是另一个故事。
答案 1 :(得分:1)
你没有捕获正则表达式中的任何内容。你的括号需要里面模式,就像这个
if ( $type =~ /(build|test)/ ) {
print "type=$1";
}
答案 2 :(得分:1)
这就是人们建议使用use warnings
和use strict
的原因。
如果您在代码中添加use warnings
,则会收到警告:
Use of uninitialized value $1 in concatenation (.) or string at type.pl line 7
代码是:
use warnings;
use strict;
my $type = "build";
if ($type =~ /(build|test)/)
{
print "type=$1";
}