这对我来说可能是一个非常基本的错误,但是我已经被困在这个问题上很长时间了,它正在推动我的问题!
我正在使用Perl循环遍历Python代码文件并识别其变量.我使用Perl正则表达式在空格之间挑选出字母数字字符的子串.正则表达式正常工作,并确定了比赛属于线,但是当我试图返回正则表达式匹配的实际子,捕获变量$1是不确定的.
这是我的正则表达式:
if ($line =~ /.*\s+[a-zA-Z0-9]+\s+.*/) {
print $line;
print $1;
}
Run Code Online (Sandbox Code Playgroud)
这是错误:
x = 1
Use of uninitialized value $1 in print at ./vars.pl line 7, <> line 2.
Run Code Online (Sandbox Code Playgroud)
据我所知,$1应该回归x.我的代码在哪里出错了?
你没有捕获结果:
if ($line =~ /.*\s+([a-zA-Z0-9]+)\s+.*/) {
Run Code Online (Sandbox Code Playgroud)
如果你想匹配一条线x = 1并获得它的两个部分,你需要匹配并用括号捕获它们.原油方法:
if ( $line =~ /^\s* ( \w+ ) \s* = \s* ( \w+ ) \s* $/msx ) {
my $var = $1;
my $val = $2;
}
Run Code Online (Sandbox Code Playgroud)