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

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. 配列参照を返すことはプラスです。完全な配列を送り返さないでください (良い仕事です)。
  3. 特にデバッグ時には、厳密/警告を使用してください
  4. を使用してシステムコールを回避してください``
于 2010-07-07T16:02:00.443 に答える
1

プログラムを の下use strict; use warnings;で実行した場合は、失敗した理由がわかります。Amadan が言ったように、返す参照を逆参照する必要があります。

于 2010-07-07T15:44:08.270 に答える
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 に答える