web-dev-qa-db-ja.com

Perlで最後の配列要素の最初から5番目の配列要素を出力するにはどうすればよいですか?

私は次のコードを実行していて、@Rainbow配列の最初の要素から@Rainbow配列の最後から5番目の要素までを表示しようとしています。このコードは、配列の境界内の正のインデックスに対しては機能しますが、負のインデックスに対しては機能しません。

@Rainbow = ("a".."z");
@slice = @Rainbow[1..-5];
print "@slice\n";
24
thenickname

あなたが欲しい

my @slice = @Rainbow[0 .. $#Rainbow - 5];

注意してください、1は最初の要素ではなく2番目の要素です。

40
Chas. Owens

..演算子は、左から右の値に 範囲 を形成します-右が左以上の場合。また、Perlでは、配列のインデックス付けはゼロから始まります。

これはどう?

@slice = @Rainbow[0..$#Rainbow-5];

$#arrayは、配列の最後の要素のインデックスを提供します。

18
martin clayton

perlop に記載されている 範囲演算子 の最初の2文から:

バイナリ ".."は範囲演算子であり、コンテキストに応じて実際には2つの異なる演算子です。リストコンテキストでは、左の値から右の値まで(1ずつ)カウントする値のリストを返します。左の値が右の値より大きい場合、空のリストを返します。

コードが機能しない場合は、コードを分解して何が起こっているかを確認します。たとえば、範囲演算子を試して、何が生成されるかを確認します。

 my @indices = 1 .. -5;
 print "Indices are [@indices]\n";

空のリストを取得し、理解できないことが起こっていることに気付いた場合は、ドキュメントをチェックして、実行しようとしていることを確認して、意図したとおりに動作していることを確認してください。 :)

6
brian d foy