を使用することができますについてshift
とpop
の最初の引数は、配列(@NAME
または@BLOCK
)、ではない(配列とは関係ありません)map
またはgrep
オペレータである必要があります。
shift
/pop
の配列を作成できます。
my $first_ele = shift @{ [ map { 10 * $_ } @arr ] }; # If you want first
my $last_ele = pop @{ [ map { 10 * $_ } @arr ] }; # If you want last
しかし、それは非常に無駄です。リストの割り当てやリストのスライスを使用して、配列の作成を避けることができます。
my ($first_ele) = map { 10 * $_ } @arr; # If you want first
my $first_ele = (map { 10 * $_ } @arr)[0]; # If you want first
my $last_ele = (map { 10 * $_ } @arr)[-1]; # If you want last
my ($first_ele, $last_ele) = (map { 10 * $_ } @arr)[0, -1]; # If you want both
しかし、それでも無駄です。最後の製品のみが必要な場合は、すべての要素を掛ける必要はありません。リストコンテキストで
my $first_ele = 10 * $arr[0]; # If you want first
my $last_ele = 10 * $arr[-1]; # If you want last
my ($first_ele, $last_ele) = map { 10 * $_ } @arr[0, -1]; # If you want both
、 'map'と' grep'農産物リストが、 'shift' /' unshift'と 'push' /' pop'は、アレイ上で動作します。以下は、はるかに理にかなっています。リストと配列はPerlでは同じものではありません。すべてを1行でやってみることに心配する必要はなく、正しいコードを書くことを心配する必要があります。 –
@MattJacob私はそれが質問への良い答えだと思った – ysth
マットヤコブの答え(良いが削除?)からの良いリンク:[list vs array](https://stackoverflow.com/questions/14001741/what-リストと配列の違いです) – zdim