私は次のコードを実行していて、@Rainbow
配列の最初の要素から@Rainbow
配列の最後から5番目の要素までを表示しようとしています。このコードは、配列の境界内の正のインデックスに対しては機能しますが、負のインデックスに対しては機能しません。
@Rainbow = ("a".."z");
@slice = @Rainbow[1..-5];
print "@slice\n";
あなたが欲しい
my @slice = @Rainbow[0 .. $#Rainbow - 5];
注意してください、1は最初の要素ではなく2番目の要素です。
..
演算子は、左から右の値に 範囲 を形成します-右が左以上の場合。また、Perlでは、配列のインデックス付けはゼロから始まります。
これはどう?
@slice = @Rainbow[0..$#Rainbow-5];
$#array
は、配列の最後の要素のインデックスを提供します。
perlop に記載されている 範囲演算子 の最初の2文から:
バイナリ ".."は範囲演算子であり、コンテキストに応じて実際には2つの異なる演算子です。リストコンテキストでは、左の値から右の値まで(1ずつ)カウントする値のリストを返します。左の値が右の値より大きい場合、空のリストを返します。
コードが機能しない場合は、コードを分解して何が起こっているかを確認します。たとえば、範囲演算子を試して、何が生成されるかを確認します。
my @indices = 1 .. -5;
print "Indices are [@indices]\n";
空のリストを取得し、理解できないことが起こっていることに気付いた場合は、ドキュメントをチェックして、実行しようとしていることを確認して、意図したとおりに動作していることを確認してください。 :)