2011-12-14 17 views
1

ディレクトリにいくつかのxmlファイルがあるので、そのディレクトリに必要なxmlファイルを検索し、以下のスクリプトを使用してxmlデータをハッシュデータ構造に格納しています。しかし、私の問題は、私は私がスクリプトの上に使用して、このperlを使ってハッシュにxmlパスを含める方法

#!/usr/bin/perl 
use warnings; 
use strict; 
use XML::Simple; 
use Carp; 
use File::Find; 
use File::Spec::Functions qw(canonpath); 
use Data::Dumper; 

my @ARGV ="C:/Main/work"; die "Need directories\n" unless @ARGV; 
find(
sub { 
    return unless (/(_service\.xml)$/ and -f); 
    Hash_information(); 
    return; 
}, 
@ARGV 
); 

sub Hash_information { 
my $path= $_; 

my $xml = new XML::Simple; 
my $data = $xml->XMLin("$path", ForceArray => [ 
'Service','SystemReaction','SW','HW','Component' , 'BM'], 
          KeyAttr=>{Service=>'Id'} ); 
    print Dumper ($data); 
return; 
    } 

ようなスクリプトを書い 私はハッシュの各XMLファイルのファイルパスを保存する必要がありますが、いずれかのハッシュデータにファイルパスを保存する方法を手伝ってくれるですすべてのサービスXMLファイルをフォルダーにし、XML :: Simpleを使用してハッシュデータ構造に格納する。これで、各XMLファイルのファイルパスをハッシュデータ構造に保存します。誰でも私を助けることができます。
ありがとうございます

+0

ps。あなたは 'sub'の終わりに裸の' return'を残すことができますが、 '$ data'を返すか、どこかに保存するつもりはありませんか? – BRFennPocock

答えて

5

File :: Findのサブルーチンでは、$ File :: Find :: nameは完全なパス名です。それをHash_informationサブルーチンに渡します。

... 
find(
    sub { 
     return unless (/(_service\.xml)$/ and -f); 
     Hash_information($File::Find::name); 
... 
sub Hash_information { 
my ($path) = @_; 
... 
+0

私はperlに慣れていないので尋ねて申し訳ありません。$ File :: Find :: nameを$ dataに渡す方法。またはhash_informationサブルーチン。私は最後の二日間からこれを苦労しています。あなたはちょうど$データに割り当てられていることを意味します。 – verendra

+1

私は私が提案したものの勇気を加えました。 – JRFerguson

+0

いいえ、私はあなたの提案を試みた。 – verendra

関連する問題