【发布时间】:2013-10-27 13:39:24
【问题描述】:
我正在尝试使用这个tool。 (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 闭包) 一个内部(嵌套的)命名子例程正在引用一个 在外部命名子例程中定义的词法变量。
调用内部子程序时,会看到 first 之前和期间的外部子例程变量 调用外部子程序;在这种情况下,在第一次调用 外部子程序完成后,内部子程序和外部子程序将没有 不再共享变量的公共值。换句话说, 变量将不再共享。
这个问题通常可以通过制作内部子程序来解决 匿名,使用 sub {} 语法。当内部匿名潜艇 外部子程序中的引用变量被创建,它们 会自动反弹到此类变量的当前值。
我已经对 Google 进行了尽职调查:link,但仍然不明白如何在我的情况下应用它。
我还回到了导致此问题的代码 sn-p 的source。为了方便参考,下面再次生成sn-p:
# 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 导致了此警告。
请帮忙。谢谢!
【问题讨论】:
标签: perl