2011-12-14 48 views
1

我在某個目錄中有一些xml文件,因此我正在該目錄中搜索所需的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 :: Simple存儲在散列數據結構中。現在我想保存散列數據結構中每個xml文件的文件路徑。誰能幫我。
在此先感謝

+0

ps。你可以在`sub`末尾放棄一個裸體`return'...但是你不是想要返回'$ data`還是將它存儲在某個地方? – BRFennPocock 2011-12-14 18:05:36

回答

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 2011-12-14 18:04:28