Xml 在perl中的子例程中声明全局变量
我想知道是否有可能在Perl中的子例程中声明一个全局变量,这样我就可以在挂钩的void函数中使用该变量,但通过在子例程中声明来限制全局变量的破坏性影响 因此,子例程使用Xml 在perl中的子例程中声明全局变量,xml,perl,anonymous-function,subroutine,Xml,Perl,Anonymous Function,Subroutine,我想知道是否有可能在Perl中的子例程中声明一个全局变量,这样我就可以在挂钩的void函数中使用该变量,但通过在子例程中声明来限制全局变量的破坏性影响 因此,子例程使用XML::Parser收集一组元素的ID,方式类似于: sub getRecipeIDs { my $recipe = shift; my @elements = (); my $parser = new XML::Parser(Style => 'Tree', Handlers =
XML::Parser
收集一组元素的ID,方式类似于:
sub getRecipeIDs {
my $recipe = shift;
my @elements = ();
my $parser = new XML::Parser(Style => 'Tree',
Handlers => {
Start => sub {
my ($expat, $element, %attrs) = @_;
if ($element eq 'recipe') {
push @elements, $attrs{id};
}
}});
$parser->parse($recipe);
return @elements;
}
我还在脚本中使用strict
因此,我想声明@elements
,这样它对getRecipeIDs
是本地的,但对匿名子例程是可见的
谢谢您的时间,非常感谢您的帮助。
我的
很好。词法变量在嵌套作用域中可见,例如匿名子例程
因此,您的代码应该按原样工作。它应该已经按照您编写示例的方式工作了。您使用“
my$func=sub{…}
”所做的是创建一个可以访问封闭范围变量的闭包——在本例中,您的代码应该可以正常工作
尽管匿名子例程很深,但它的范围包括词法数组@元素
,并且可以自由访问它
此外,子例程作为对数组的引用计数,因此在调用getRecipeIDs