0

私には意味をなさない方法で動作する正規表現に問題があります。$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.

このコードは関数からの抜粋ですが、何が問題なのかを説明するには十分です。

出力の 2 行目は 1 行目と同じはずですが、if 句によって 2 つの print ステートメントの間で $$line が変更されているようです。

何かアドバイス??

4

1 に答える 1