代入先はリストかスカラーか

配列からの代入は代入先がスカラーコンテキストか、リストコンテキストかによって違います。

まずスカラーコンテキストの場合は、配列の要素数が代入されます。この場合は要素が五個なので3が入ります。$#arrayの場合は、最後尾の要素のインデクスを取得するので2になります。

my @array = ( 1, 2, 3 );
・・・
my $num = @array;
・・・

$num : 3

次にリストコンテキストの場合は、各要素が代入されます。以下の場合、$num1には1、$num2には2が入ります。残りの3はどこにも代入されません。ただし、shiftのように取り出しているわけではないので、@arrayには3つの要素が残っているので、無効コンテキストというわけではありません。

・・・
my ($num1, $num2) = @array;
・・・

$num1 : 1
$num2 : 2

実用では、新しい空の配列を用意してそこに入れてしまう事が多いかなと思いますが。

・・・
my @another = @array;
・・・

@another : 1, 2, 3