首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法通过数组perl

无法通过数组perl
EN

Stack Overflow用户
提问于 2013-10-30 12:58:56
回答 1查看 58关注 0票数 0

我有一个perl脚本:

代码语言:javascript
复制
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的输出:

代码语言:javascript
复制
$VAR1 = [
          'A',
          'B',
          'C',
        ];
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-30 13:06:35

当你做的时候

代码语言:javascript
复制
&genFile($perMpPerMerc, $perMpPerMercHash{$perMpPerMerc});

您正在传递一个对数组的引用。

所以在

代码语言:javascript
复制
sub genFile {
    my ( $outFileName, @skuArr ) = @_;

你必须做:

代码语言:javascript
复制
sub genFile {
    my ( $outFileName, $skuArr ) = @_;

然后使用@$skuArr

看看参考文献

修改后的genFile潜艇将是:

代码语言:javascript
复制
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

代码语言:javascript
复制
&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";
    }
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19682906

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档