为什么我的"我的"变量在子内部无法访问?



我在写一个Mason。x组件页,它的行为不像我所期望的。perlsub手册页指出,my变量应该可以在sub中访问。但是下面的代码:

my @myOrderBy = @orderBy;
sub sortAll
{
  my $ret = 0;
  foreach my $sortStr (@myOrderBy)
  {
  }
}

给了我错误:

编译时出现错误/opt/rt4/地方/插件/RTx-Foo/html/cf/帮助/ticketQuery.ajx:变量"@myOrderBy"在/opt/rt4/地方/插件/RTx-Foo/html/cf/帮助/ticketQuery.ajx第206行。

(第206行是foreach行)

Mason显然将您的代码封装在sub中(就像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;

您不应该在Mason组件中使用命名子,命名空间是共享的。用这个代替:

my $sortall = sub{…};

my变量仅在声明它们的代码块中可见。sub是一个不同的代码块,因此@myOrderBy在其中不可用。见http://www.perlmonks.org/index.pl?node_id=66677

相关内容

  • 没有找到相关文章

最新更新