我在一个变量中存储了一段字符串“Strawberry Hill”。但是我试图使用正则表达式来查看字符串是否与特定格式匹配。如果字符串匹配,我想将其存储在变量中。但是,没有任何内容存储在变量中。我在if语句之外的同一个脚本中测试了正则表达式,并且它有效。
my $address="STRAWBERRY HILL";
if($address=~ m/(\w+\s+\w+)/)
{
my $scheme_name=$1;
}
print " Scheme Name: $scheme_name";
答案 0 :(得分:2)
首先,始终使用use strict; use warnings qw( all );
。您的错误将在编译时发现。
my
创建一个新变量,该变量的范围限定(仅在其所在的最内部块中可见)。
有许多可能的解决方案。
移动print
。
if ( my ($scheme_name) = $address =~ /(\w+\s+\w+)/ ) {
print "Scheme Name: $scheme_name\n";
} else {
print "Scheme Name: default\n";
}
在if
之前创建变量。
my $scheme_name = "default";
if ($address =~ /(\w+\s+\w+)/) {
$scheme_name = $1;
}
print "Scheme Name: $scheme_name\n";
从使用if
切换到使用条件运算符。
my $scheme_name = $address =~ /(\w+\s+\w+)/ ? $1 : "default";
print "Scheme Name: $scheme_name\n";
答案 1 :(得分:0)
$scheme_name
需要在if
块之外定义。如果if
测试为假,则不会声明$scheme_name
。
my
将列出的变量声明为本地(词法) 封闭块,文件或eval
。如果有多个变量 如果列出,列表必须放在括号中。
my $address="STRAWBERRY HILL";
my $scheme_name="";
if($address=~ m/(\w+\s+\w+)/)
{
$scheme_name = $1;
}
print " Scheme Name: $scheme_name";