0
我遇到了一個正則表達式對我來說沒有意義的問題。 $ line是對標量的引用(在這個例子中,字符串是'print'hello world \ n「'),但是執行正則表達式匹配的嘗試似乎成功了,但也改變了$$行的值。除了這個,我在嘗試修改第65行Perl對只讀變量的修改
這裏$$線當錯誤代碼:
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.
此代碼是一個函數的摘錄,但它應該足以說明發生了什麼問題。
輸出的第二行應該與第一行相同,但是在if語句的兩個打印語句之間出現$$ line正在被改變。
有什麼建議?
使用'use strict;使用警告;'第一個 –
它現在使用嚴格和警告。已經在使用警告,嚴格只需要把'我'放在變量前面 – Lobe