4

コンテキストに応じて、スカラーまたは配列のいずれかを取得します。わかりました。
ただし、次の場合:

print reverse <STDIN>;

リスト コンテキストを取得するのはなぜですか? docによると、はリストまたはスカラーコンテキストのいずれかです。printも同様です。

文字 または文字列 のリストを出力します。成功した場合は true を返します。

そうですSTDINSTDINでは、最初の行だけを収集するのではなく、EOF まで行を取得するのはなぜでしょうか。

4

3 に答える 3

7

あなたは2つの独立したものを混同しているようです:

  • 演算子は、リスト、スカラー、または無効なコンテキストで評価されます。
  • 演算子は、そのオペランドが評価されるコンテキストを決定します。

のオペランドはreverse、常にリスト コンテキストで評価されます。

reverse LIST

したがって<STDIN>、リストコンテキストで評価されます。


スカラー以外のものを返すことができるすべての演算子と同様reverseに、スカラー コンテキストとリスト コンテキストでは異なる動作をします。

のオペランドはprint、常にリスト コンテキストで評価されます。

print LIST

したがってreverse、リストコンテキストで評価されます。つまり、オペランドの順序が逆になります。各オペランドの文字の順序を逆にしたり、リストを連結したりしません。

于 2013-04-11T14:08:25.503 に答える
3

実際printには常に文字列のリストを出力します。スカラーを渡すことができますが、1 つのリストであるかのように動作します。

したがって、この場合reverse、リストコンテキストで呼び出されていることがわかっているため、リスト引数を逆にします。

于 2013-04-11T13:37:38.270 に答える
2

print reverse <STDIN>;基本的には次と同じです:

@lines = <STDIN>;
@reversed_lines = reverse @lines;
print @reversed_lines;

STDINからリストを読み取るのに対し、STDINから$line = <STDIN>;1を読み取ると言います。@line = <STDIN>;

の引数リストprintは常にリスト コンテキストです。行コンテキストは、連結演算子を使用して強制できます。リストではなくprint reverse <STDIN> . "";を読み取ります。

于 2013-04-11T13:51:18.880 に答える