1

配列を返す次の関数があります。

sub getUsers() {
    @users[0] = 'test';
    @users[1] = 'test2';
    return @users;
}

@temp = getUsers();
$i = @temp;

print "There are $i users";

しかし、印刷すると、数値2(配列のカウント) として表示されます。何が起こっていますか?

4

2 に答える 2

11

$i =代入スカラー コンテキストの右側を指定するスカラー代入です。スカラーコンテキストで配列に言及すると、その長さが返されます。

于 2013-10-31T22:40:18.330 に答える
0

スカラー コンテキストで配列を使用すると、配列は配列内の項目数を返します。

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";
于 2013-11-01T00:42:25.947 に答える