4

Tom Christiansen、brian d foy、Larry Wall、JonOrwantによる「ProgrammingPerl」を読みました。私が理解できなかった次のテキストがあります(私が理解していない正確な場所は太字でマークされています):

本当に知りたいのは、どの演算子がどのコンテキストをオペランドに提供するかです。たまたま、構文の説明にLISTが含まれているため、どれがリストコンテキストを提供しているかを簡単に判断できます。他のすべてはスカラーコンテキストを提供します。一般的に、それは非常に直感的です。必要に応じて、疑似関数を使用して、LISTの途中の引数にスカラーコンテキストを強制scalarできます 。Perlは、コンテキスト内でリストコンテキストを強制する方法を提供していません。これは、リストコンテキストが必要な場合は、制御関数のLISTによってすでに提供されているためです。

便宜上、次の質問を作成したいと思います。

  1. スニペットのLISTとはどういう意味ですか?

  2. 構文の説明とは何ですか?(ある種のドキュメントのようです)

  3. 次のテキストはどういう意味ですか:

LISTの途中でスカラーコンテキストを引数に強制することができます

4

1 に答える 1

10

テキストが言うように、それは非常に単純です。perldoc -f printたとえば、次の例を見てください。

print FILEHANDLE LIST
print FILEHANDLE
print LIST

そこに書かれているように、printLIST引数を取ります。つまり、後に投稿されるものprintはすべてリストコンテキストにあります。これは、引数がLISTとして示されている関数の場合も同じです。

このscalar関数を使用すると、このリストコンテキストをオーバーライドして、引数がリストコンテキストで評価されないようにすることができます。たとえば、次のようなファイルハンドルreadlineステートメント:

my $line = <$fh>;

はスカラーであるため、スカラーコンテキストで評価されます$line。これは、1行だけが読み取られて変数に入れられることを意味します。ただし、次のことを行う場合:

print <$fh>;

readlineはリストコンテキストにあります。つまり、ファイル内の残りのすべての行が読み取られます。readlineステートメントをスカラーコンテキストに配置することで、これをオーバーライドできます。

print scalar <$fh>;

そして、あなたはただ一行を読むでしょう。より正確には、リストの途中でスカラーコンテキストを適用できます。

print @list, scalar <$fh>, @list2;

これはおそらくあなたの引用で言及されているものです。

于 2012-07-12T23:17:17.943 に答える