0
#! /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

4 回答 4

5

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

foreach $cluster (@{getClusters()})

或者

return @clusters;

任何一个都应该修复它(效果略有不同),首选第一个(你的数组有点大)。

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

于 2010-07-07T15:35:58.227 回答
1

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

于 2010-07-07T15:44:08.270 回答
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用于调试的循环,您可以重置$"操作符,但是可以根据您的喜好分隔数组元素(例如, , , ,或者我在上面的代码中如何设置它\n)。
  2. 返回一个数组 ref 是一个加号,不要发回完整的数组(干得好)
  3. 使用严格/警告,尤其是在调试时
  4. 尽量避免使用系统调用``
于 2010-07-07T16:02:00.443 回答
0

为方便起见,您可以先接收返回值,然后像这样打印

use strict;
use warning;
my $cluster_array = getClusters();
 my @cluster_return = @{$cluster_array};
foreach my $cluster(@cluster_return){
 print"$cluster\n";
}
于 2010-07-07T15:47:22.603 回答