readline EXPR

Reads from the filehandle whose typeglob is contained in EXPR (or from *ARGV if EXPR is not provided). In scalar context, each call reads and returns the next line until end-of-file is reached, whereupon the subsequent call returns undef. In list context, reads until end-of-file is reached and returns a list of lines. Note that the notion of "line" used here is whatever you may have defined with $/ (or $INPUT_RECORD_SEPARATOR in English). See "$/" in perlvar.

型グロブが EXPR (EXPR がない場合は *ARGV) に含まれている ファイルハンドルから読み込みます。 スカラコンテキストでは、呼び出し毎に一行読み込んで返します; ファイルの 最後まで読み込んだら、以後の呼び出しでは undef を返します。 リストコンテキストでは、ファイルの最後まで読み込んで、行のリストを返します。 ここでの「行」とは、$/ (または English モジュールでは $INPUT_RECORD_SEPARATOR) で 定義されることに注意してください。 "$/" in perlvar を参照してください。

When $/ is set to undef, when readline is in scalar context (i.e., file slurp mode), and when an empty file is read, it returns '' the first time, followed by undef subsequently.

$/undef を設定した場合は、 readline はスカラコンテキスト (つまりファイル吸い込み モード)となり、空のファイルを読み込んだ場合は、最初は '' を返し、 それ以降は undef を返します。

This is the internal function implementing the <EXPR> operator, but you can use it directly. The <EXPR> operator is discussed in more detail in "I/O Operators" in perlop.

これは <EXPR> 演算子を実装している内部関数ですが、 直接使うこともできます。 <EXPR> 演算子についてのさらなる詳細については "I/O Operators" in perlop で議論されています。

    my $line = <STDIN>;
    my $line = readline(STDIN);    # same thing

If readline encounters an operating system error, $! will be set with the corresponding error message. It can be helpful to check $! when you are reading from filehandles you don't trust, such as a tty or a socket. The following example uses the operator form of readline and dies if the result is not defined.

readline が OS のシステムエラーになると、 $! に対応するエラーメッセージがセットされます。 tty やソケットといった、信頼できないファイルハンドルから読み込む時には $! をチェックするのが助けになります。 以下の例は演算子の形の readline を使っており、結果が 未定義の場合は die します。

    while ( ! eof($fh) ) {
        defined( $_ = readline $fh ) or die "readline failed: $!";

Note that you can't handle readline errors that way with the ARGV filehandle. In that case, you have to open each element of @ARGV yourself since eof handles ARGV differently.

readline のエラーは ARGV ファイルハンドルの方法では 扱えないことに注意してください。 この場合、eofARGV を異なった方法で扱うので、 @ARGV のそれぞれの要素を自分でオープンする必要があります。

    foreach my $arg (@ARGV) {
        open(my $fh, $arg) or warn "Can't open $arg: $!";

        while ( ! eof($fh) ) {
            defined( $_ = readline $fh )
                or die "readline failed for $arg: $!";

Like the <EXPR> operator, if a readline expression is used as the condition of a while or for loop, then it will be implicitly assigned to $_. If either a readline expression or an explicit assignment of a readline expression to a scalar is used as a while/for condition, then the condition actually tests for definedness of the expression's value, not for its regular truth value.

<EXPR> 演算子と同様、 readline 式が whilefor ループの条件として使われた場合、 これは暗黙に $_ に代入されます。 readline 式または readline 式からスカラへの明示的な代入が while/for の条件部として使われた場合、 条件は通常の真の値かどうかではなく、式の値が定義されているかどうかを テストします。