perl-5.20.1
readline EXPR
readline

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). See "$/" in perlvar.

型グロブが EXPR (EXPR がない場合は *ARGV) に含まれている ファイルハンドルから読み込みます。 スカラコンテキストでは、呼び出し毎に一行読み込んで返します; ファイルの 最後まで読み込んだら、以後の呼び出しでは undef を返します。 リストコンテキストでは、ファイルの最後まで読み込んで、行のリストを返します。 ここでの「行」とは、$/ または $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 で議論されています。

    $line = <STDIN>;
    $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( $_ = <$fh> ) or die "readline failed: $!";
        ...
    }

Note that you have 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( $_ = <$fh> )
                or die "readline failed for $arg: $!";
            ...
        }
    }