このツールを使用しようとしています。(Perl版)しかし、推奨コマンドを使って実行しようとするとperl bin/SWOG.pl --input=examples/simple.swog --toPng=simple
、次の警告が表示されます(use diagnostics
修正方法に光を当てることを期待して追加されました)
Variable "$np" will not stay shared at (re_eval 8) line 2 (#1)
(W Closure) 内側の (ネストされた) 名前付きサブルーチンが、外側の名前付きサブルーチンで定義されたレキシカル変数を参照しています。
内側のサブルーチンが呼び出されると、外側のサブルーチンの変数の値が、外側のサブルーチンへの最初の 呼び出しの前と呼び出し中に表示されます。この場合、外側のサブルーチンへの最初の呼び出しが完了すると、内側と外側のサブルーチンは変数の共通の値を共有しなくなります。つまり、変数は共有されなくなります。
この問題は通常、sub {} 構文を使用して内部サブルーチンを匿名にすることで解決できます。外側のサブルーチン内の変数を参照する内側の匿名サブルーチンが作成されると、それらはそのような変数の現在の値に自動的に再バインドされます。
Google: linkに対してデューデリジェンスを行いましたが、私の場合にこれを適用する方法がまだわかりません。
また、この問題の原因となっているコード スニペットのソースに戻りました。簡単に参照できるように、スニペットを再度以下に示します。
# parentheses balance pattern
# @ http://www.unix.org.ua/orelly/perl/prog3/ch05_10.htm
$np= qr{
\(
(
(?:
(?> [^()]+ ) # Non-parens without backtracking
|
(??{ $np }) # Group with matching parens
)*
)
\)
}x;
私は、$np
この同じ変数の定義内でネストされて$np
いることがこの警告を引き起こしていると考えています。
助けてください。ありがとう!