我有一个perl脚本:
my %perMpPerMercHash;
foreach my $sheet () { #proper ranges specified
foreach my $row ( ) { #proper ranges specified
#required variables declared.
push(@{$perMpPerMercHash{join("-", $mercId, $mpId)}}, $mSku);
}
}
#Finally 'perMpPerMercHash' will be a hash of array`
foreach my $perMpPerMerc ( keys %perMpPerMercHash ) {
&genFile($perMpPerMerc, $perMpPerMercHash{$perMpPerMerc});
}
sub genFile {
my ( $outFileName, @skuArr ) = @_;
my $output = new IO::File(">$outFileName");
my $writer = new XML::Writer( OUTPUT => $output, DATA_MODE => 1, DATA_INDENT => 2);
#mpId is generated.
&prepareMessage($writer, $mpId, @skuArr);
}
sub prepareMessage {
my ( $writer, $mpId, @skuArr ) = @_;
my $count = 1;
print Dumper \@skuArr; #Printing correctly, 8-10 values.
foreach my $sku ( @skuArr ) { #not iterating.
print "loop run" , $sku, "\n"; #printed only once.
}
}有人能帮我解释一下为什么会这样吗。我对perl很陌生,无法理解这种异常。
编辑:Dumper的输出:
$VAR1 = [
'A',
'B',
'C',
];发布于 2013-10-30 13:06:35
当你做的时候
&genFile($perMpPerMerc, $perMpPerMercHash{$perMpPerMerc});您正在传递一个对数组的引用。
所以在
sub genFile {
my ( $outFileName, @skuArr ) = @_;你必须做:
sub genFile {
my ( $outFileName, $skuArr ) = @_;然后使用@$skuArr。
看看参考文献
修改后的genFile潜艇将是:
sub genFile {
my ( $outFileName, $skuArr ) = @_;
my $output = new IO::File(">$outFileName");
my $writer = new XML::Writer( OUTPUT => $output, DATA_MODE => 1, DATA_INDENT => 2);
#mpId is generated.
&prepareMessage($writer, $mpId, @$skuArr);
}而另一艘潜艇不需要修改。
或者您可以通过引用传递始终skuArr:
&genFile($perMpPerMerc, $perMpPerMercHash{$perMpPerMerc});
...
sub genFile {
my ( $outFileName, $skuArr ) = @_;
...
&prepareMessage($writer, $mpId, $skuArr);
}
sub prepareMessage {
my ( $writer, $mpId, $skuArr ) = @_;
my $count = 1;
print Dumper $skuArr;
foreach my $sku ( @$skuArr ) {
print "loop run" , $sku, "\n";
}
}https://stackoverflow.com/questions/19682906
复制相似问题