我遇到了正则表达式的问题,其行为方式对我来说没有意义。$line 是对标量的引用(在这种情况下,字符串是 'print "hello world\n"'),但是执行正则表达式匹配的尝试似乎成功但也改变了 $$line 的值。除此之外,尝试在第 65 行修改 $$line 时出现错误
这是代码:
my $line = $_[0];
$$line =~ s/^(\s+\(?)//;
my @functions = ('print');
# Check if the expression is a function
for my $funcName (@functions) {
print $$line . "\n";
if ($$line =~ m/^($funcName\(?\s*)/) {
print $$line . "\n";
$$line =~ s/$1//; # THIS IS LINE 65
my $args = [];
while (scalar(@{$args}) == 0 || ${$line} =~ /\s*,/) {
push (@{$args}, parseExpression($line))
}
my $function = {
type => 'function',
name => $funcName,
args => $args
};
return $function;
}
}
输出如下:
print "hello world\n"
print
Modification of a read-only value attempted at ./perl2python.pl line 65, <> line 3.
这段代码是一个函数的摘录,但是它应该足以说明出了什么问题。
输出的第二行应该与第一行相同,但似乎 $$line 正在通过 if 子句在两个打印语句之间进行更改。
有什么建议吗??