xml - 在 perl 的子程序中声明全局变量

标签 xml perl anonymous-function subroutine

我想知道是否可以在 Perl 的子例程中声明一个全局变量,这样我就可以在一个 Hook 的 void 函数中使用该变量,但通过在子例程中声明它来限制全局变量的破坏性影响。

所以子例程使用 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 { ... } ”做的是创建一个闭包,它可以访问封闭范围的变量——在本例中是 @elements.

关于xml - 在 perl 的子程序中声明全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12142387/

相关文章:

mysql - Perl 编译错误 Compilation failed in require at

windows - Perl:如何将编码添加到 PAR 打包存档

linux - Bash脚本从一行复制并用副本替换另一行

php - PHP 5.3.0 之前的匿名函数

php - 我可以立即评估匿名函数吗?

Java XML读取问题: read different child tags

java - Spring RequestMapping 不工作

objective-c - 在 iOS 中从文本文件创建对象的最有效方法

matlab - MATLAB中的逐次函数应用

php - 使用 Curl 发布 xml 时获取权限被拒绝?