【问题标题】:returning arrays from subroutines in perl and using them in another subroutin从 perl 中的子程序返回数组并在另一个子程序中使用它们
【发布时间】:2017-04-10 23:11:47
【问题描述】:

嗨,我正在努力学习 Perl。我在创建数组和使用引用在另一个子例程中使用它时遇到问题。

示例代码:

#!/usr/bin/perl

use strict;
use warnings;

sub test {

  my @a = ("a","b","c");

  return \@a;
}

# code just for test, the reference would just be used in next subroutine
my $array = test();
my @arr   = @array;

print "@arr\n"; # just for test

test2(@arr);

sub test2 {

  my @array1 = @_;

  foreach $values (@array1) {
    # do things
  }
}

重点是在第二个子中使用第一个子的数组。

----------------- V2 -------------

#!/usr/bin/perl

    use strict;
    use warnings;
    test();
    sub test {

      my @a = ("a","b","c");

      return \@a;
    }

    print "\@a\n";

    test2(\@a);

    sub test2 { (my $array1) = @_;
      foreach my $values (@array1) {
        print "$values\n";
      }
    }

【问题讨论】:

  • my @ = 是语法错误。
  • 您已包含语法错误my @ = 的事实表明您尚未粘贴您测试过的实际代码。这意味着我们不能相信您的问题中的任何其他内容。看起来问题在于@array$array 之间的混淆——但这可能只是一个错字。要求我们调试你甚至没有运行过的代码是不尊重的。
  • 经过进一步调查,我注意到此代码也无法运行,因为您有 use strict 但您没有声明 @array。所以运行这个程序会报一个致命错误。在这一点上,您似乎并不真正关心如何解决这个问题,而我正在继续帮助其他人。
  • 对不起,戴夫,只是一个错字。在没有 GUI 的 VM 上运行代码,因此可以复制过去。

标签: arrays perl reference subroutine


【解决方案1】:

@array 是与$array 完全不同的变量。要取消引用 $array,请使用 @$array(请参阅 http://perlmonks.org/?node=References+quick+reference)。

只传递对 test2 的引用会更有效,所以:

test2($array);
sub test2 {
    my ($array1) = @_;
    foreach $values (@$array1) {

【讨论】:

  • 我不确定我是否正确理解了所有内容。我在第一个下发布了一个新的尝试。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多