In perl.git, the branch blead has been updated

<http://perl5.git.perl.org/perl.git/commitdiff/e00e4ce90e17ff7101c36fc5496e8b2e353e7f7b?hp=57ad57e0c240e6f9b1b9e73de8068a9bc11b5466>

- Log -----------------------------------------------------------------
commit e00e4ce90e17ff7101c36fc5496e8b2e353e7f7b
Author: brian d foy <[email protected]>
Date:   Fri Sep 25 15:17:39 2009 -0500

    * Fix trailing whitespace in blead 778c687

M       pod/perlfunc.pod

commit 0f03d336cfac20781d0a45d83906fa559a5ecf17
Author: brian d foy <[email protected]>
Date:   Fri Sep 25 15:15:59 2009 -0500

    RT #69208: Check eof before using readline in perlfunc readline example

M       pod/perlfunc.pod
-----------------------------------------------------------------------

Summary of changes:
 pod/perlfunc.pod |   38 ++++++++++++++++++++++++--------------
 1 files changed, 24 insertions(+), 14 deletions(-)

diff --git a/pod/perlfunc.pod b/pod/perlfunc.pod
index 08c406c..bcf2b78 100644
--- a/pod/perlfunc.pod
+++ b/pod/perlfunc.pod
@@ -4332,12 +4332,12 @@ X<readline> X<gets> X<fgets>
 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
+subsequent call returns C<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 however you may have defined it with C<$/> or
 C<$INPUT_RECORD_SEPARATOR>).  See L<perlvar/"$/">.
 
-When C<$/> is set to C<undef>, when readline() is in scalar
+When C<$/> is set to C<undef>, when C<readline> 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<undef> subsequently.
 
@@ -4348,19 +4348,29 @@ operator is discussed in more detail in L<perlop/"I/O 
Operators">.
     $line = <STDIN>;
     $line = readline(*STDIN);          # same thing
 
-If readline 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<readline>, and takes the 
necessary
-steps to ensure that C<readline> was successful.
+If C<readline> 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<readline> and dies if the result is not defined.
 
-    for (;;) {
-        undef $!;
-        unless (defined( $line = <> )) {
-            last if eof;
-            die $! if $!;
+       while ( ! eof($fh) ) {
+               defined( $_ = <$fh> ) or die "readline failed: $!";
+           ...
+       }
+
+Note that you have can't handle C<readline> errors that way with the
+C<ARGV> filehandle. In that case, you have to open each element of
+C<@ARGV> yourself since C<eof> handles C<ARGV> 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: $!";
+            ...
         }
-        # ...
     }
 
 =item readlink EXPR

--
Perl5 Master Repository

Reply via email to