Perl распечатать массив из подпрограммы - PullRequest
0 голосов
/ 07 июля 2010
#! /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 ]

5 голосов
/ 07 июля 2010

Вы возвращаете ссылку и ни разу не разыменовываете ее.

foreach $cluster (@{getClusters()})

OR

return @clusters;

Любой из них должен это исправить (с немного отличающимися эффектами), причем предпочтительным является первый (ваш массив довольно большой).

Вы использовали бы возврат массива без ссылок для ограниченного числа элементов, обычно для целей множественного возврата (таким образом, обычно это ограничено 2 или 3 массивами известной длины).

1 голос
/ 07 июля 2010

Perl Solution

#!/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. Возвращение ссылки на массив является плюсом, не отправляйте обратно полный массив (хорошая работа)
  3. использовать строгие / предупреждения, особенно при отладке
  4. попытаться избежать системных вызовов, используя ``
1 голос
/ 07 июля 2010

Если бы вы запустили вашу программу под use strict; use warnings;, она бы сказала вам, почему она потерпела неудачу.Как сказал Амадан, вам нужно разыменовать возвращаемую вами ссылку.

0 голосов
/ 07 июля 2010

Для простоты вы можете сначала получить возвращаемое значение, а затем напечатать его как

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