来自子程序的perl打印数组

时间:2010-07-07 15:31:52

标签: perl arrays foreach subroutine

#! /usr/local/bin/perl 
sub getClusters
{
my @clusters = `/qbo/bin/getclusters|grep -v 'qboc33'`;
chomp(@clusters);
return \@clusters;
}

嗯,好吧..我怎么得到这个阵列打印,因为......

foreach $cluster (getClusters())
{ print $cluster."\n"; }

似乎不起作用。 感谢。

4 个答案:

答案 0 :(得分:5)

您正在返回引用,而不是在任何地方取消引用它。

foreach $cluster (@{getClusters()})

OR

return @clusters;

要么修复它(效果略有不同),第一个是首选(你的数组有点大)。

对于有限数量的元素,您将使用非引用数组返回,通常用于多次返回(因此,通常,限制为2或3个已知长度数组)。

答案 1 :(得分:1)

如果您在use strict; use warnings;下运行程序,它会告诉您失败的原因。正如Amadan所说,你需要取消引用你返回的参考文献。

答案 2 :(得分:1)

Perl解决方案

#!/usr/local/bin/perl
use strict;
use warnings;

main();

sub main{
   {
      local $"    =  "\n";
      print "@{getClusters()}";
   }
}  

sub getClusters{
   my @tArray  =  `/qbo/bin/getclusters|grep -v 'qboc33'`;
   chomp @tArray;
   return \@tArray;
}

注意

  1. 您不需要foreach循环进行调试,您可以重置$"运算符,但要分开您喜欢的数组元素(例如,{{1} },或者我如何在,上面的代码中设置它。
  2. 返回数组引用是一个加号,不要发回完整数组(好工作)
  3. 使用严格/警告,尤其是在调试时
  4. 尝试使用\n
  5. 避免系统调用

答案 3 :(得分:0)

为方便起见,您可以先收到返回值,然后将其打印为

use strict;
use warning;
my $cluster_array = getClusters();
 my @cluster_return = @{$cluster_array};
foreach my $cluster(@cluster_return){
 print"$cluster\n";
}