我正在编写一个 Mason 1.x 组件页面,但它的行为并不像我期望的那样。
perlsub 手册页指出 my
变量应该可以在 sub
中访问。但是下面的代码:
my @myOrderBy = @orderBy;
sub sortAll
{
my $ret = 0;
foreach my $sortStr (@myOrderBy)
{
}
}
给我错误:
Error during compilation of /opt/rt4/local/plugins/RTx-Foo/html/cf/helpers/ticketQuery.ajx: Variable "@myOrderBy" is not available at /opt/rt4/local/plugins/RTx-Foo/html/cf/helpers/ticketQuery.ajx line 206.
(第 206 行是 foreach
行)
相同的代码在非 Mason 上下文中工作正常。
最佳答案
Mason 显然将您的代码包装在一个子程序中(就像 mod_perl 那样)。这意味着你最终会得到类似的东西
$ perl -we'sub { my $x; sub sortAll { $x } }'
Variable "$x" is not available at -e line 1.
解释很复杂,但归结为:Perl 不支持嵌套的命名子程序。尝试这样做会导致奇怪的错误。
在这种情况下,我是否建议您使用 local our $x;
而不是 my $x;
?
关于perl - 为什么我的 `my` 变量不能在 sub 中访问?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14087779/