Perlのサブルーチン内でグローバル変数を宣言して、その変数をフックされた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
お時間をいただきありがとうございます。どんな助けでも大歓迎です。