=over =item readline EXPR =item readline X X X Reads from the filehandle whose typeglob is contained in EXPR (or from C<*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 C. 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 C<$/> or C<$INPUT_RECORD_SEPARATOR>). See L. When C<$/> is set to C, when C is in scalar context (i.e., file slurp mode), and when an empty file is read, it returns C<''> the first time, followed by C subsequently. This is the internal function implementing the C<< >> operator, but you can use it directly. The C<< >> operator is discussed in more detail in L. $line = ; $line = readline(*STDIN); # same thing If C encounters an operating system error, C<$!> will be set with the corresponding error message. It can be helpful to check C<$!> 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 C and dies if the result is not defined. while ( ! eof($fh) ) { defined( $_ = <$fh> ) or die "readline failed: $!"; ... } Note that you have can't handle C errors that way with the C filehandle. In that case, you have to open each element of C<@ARGV> yourself since C handles C differently. 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: $!"; ... } } =back