配列を返す次の関数があります。
sub getUsers() {
@users[0] = 'test';
@users[1] = 'test2';
return @users;
}
@temp = getUsers();
$i = @temp;
print "There are $i users";
しかし、印刷すると、数値2
(配列のカウント) として表示されます。何が起こっていますか?
$i =
代入スカラー コンテキストの右側を指定するスカラー代入です。スカラーコンテキストで配列に言及すると、その長さが返されます。
スカラー コンテキストで配列を使用すると、配列は配列内の項目数を返します。
Perldataの Perldoc から
スカラーコンテキストでのリスト割り当ては、割り当ての右側の式によって生成された要素の数を返します...
あなたが言う時:
$i = @temp;
リストを取得して、それをスカラー変数に代入しようとしています。その配列をスカラー コンテキストで使用しています。したがって、配列のサイズを取得します。(最大のインデックスではありません。それ$#temp
があなたを得るものです。
この関数を使用してscalar
、スカラー コンテキストで配列を強制することができます。スカラー @foo . " 配列内のアイテム\n";
このprint
関数は、単一の文字列だけでなく、時間のリストを取ることができます。次に、変数の値を使用し$,
て配列を結合します。
アイテムのリストが必要な場合は、結合を使用してリストを単一の文字列に結合します。
print "There are " . scalar @foo . " items in the array\n";
print "They are " . join ( ", " $foo ) . ".\n";