Perlコードは、同じ拡張子を持つ複数のファイル(.xml)を参照します。

Perlコードは、同じ拡張子を持つ複数のファイル(.xml)を参照します。

複数のXMLファイルを解析しようとしていますが、いくつかの問題があります。以下のスクリプトセクションは$twig->parsefile("output_1.xml"); そのファイルをうまく解析します。しかし、ディレクトリ内のすべての.xmlファイルを解析したいと思います。私は次のコードで各ファイルを書いてみました。

$twig->parsefile("output_1.xml" "output_2.xml" "output_3.xml");

また、Bashのようにワイルドカードを使ってみました。

$twig->parsefile("*.xml");

しかし、これらの試みのどれも成功しませんでした。ディレクトリ内のすべての.xmlファイルを解析するようにスクリプトを変更するにはどうすればよいですか?知識が足りなくてすみません。私は今Perlを使い始めました。

#!/bin/perl -w

use strict;
use XML::Twig;

my $twig = XML::Twig->new(
   twig_handlers => {item => \&acct}
);
$twig->parsefile("output_1.xml");                              

sub acct {
    my ($t, $elt) = @_;

          for my $tag (qw(itemId title viewItemURL convertedCurrentPrice)) {
                    print $elt->field($tag), "\n";
                        }
                            print "\n";
                            print "\n";
                            }

答え1

次のようにディレクトリの内容を列挙できます。

my @files = <*.xml>;    # or: my @files = </your/path/to/*.xml>;
foreach my $file (@files) {
    $twig->parsefile($file);
}

関連情報