我正在写一个Mason 1.x组件页面,它的表现并不像我期待的那样.perlsub手册页指示my变量应该在a中可访问sub.但是以下代码:
my @myOrderBy = @orderBy;
sub sortAll
{
my $ret = 0;
foreach my $sortStr (@myOrderBy)
{
}
}
Run Code Online (Sandbox Code Playgroud)
给我错误:
编译/opt/rt4/local/plugins/RTx-Foo/html/cf/helpers/ticketQuery.ajx时出错:/ opt/rt4/local/plugins/RTx-Foo/html中没有变量"@myOrderBy" /cf/helpers/ticketQuery.ajx第206行.
(第206行是该foreach行)
相同的代码在非Mason上下文中正常工作.
Mason显然将你的代码包装在一个sub中(比如mod_perl).这意味着你最终得到类似的东西
$ perl -we'sub { my $x; sub sortAll { $x } }'
Variable "$x" is not available at -e line 1.
Run Code Online (Sandbox Code Playgroud)
解释很长很复杂,但归结为:Perl不支持嵌套的命名subs.试图这样做会导致奇怪的错误.
我建议你使用local our $x;而不是my $x;在这种情况下吗?