in reply to Last Line Read? (Any way to use IO::Handle methods on a "First-Class" Filehandle?)

You can't do $fh->input_line_number, but you can do (\$fh)->input_line_number.
  • Comment on Re: Last Line Read? (Any way to use IO::Handle methods on a "First-Class" Filehandle?)

Replies are listed 'Best First'.
Re^2: Last Line Read? (Any way to use IO::Handle methods on a "First-Class" Filehandle?)
by naikonta (Curate) on Jun 08, 2007 at 06:18 UTC
    I'm sorry, but I'm confused with your statement.
    $ perl -MIO::Handle -le 'open my $fh, "<", shift or die $!; print $fh- +>input_line_number while <$fh>' a_file_name 1 2 3 4 . . . $ perl -MIO::Handle -le 'open my $fh, "<", shift or die $!; print (\$f +h)->input_line_number while <$fh>' a_filename REF(0x99d7cdc) Can't call method "input_line_number" without a package or object refe +rence at -e line 1, <$fh> line 1. # $fh = do {local *FH}; #bad $ perl -MIO::Handle -le 'my $fh = do {local *FH}; open $fh, "<", shift + or die $!; print (\$fh)->input_line_number while <$fh>' a_file_name GLOB(0x846ccdc) Can't call method "input_line_number" without a package or object refe +rence at -e line 1, <FH> line 1.
    Update: Added example code with "#bad" mark

    Open source softwares? Share and enjoy. Make profit from them if you can. Yet, share and enjoy!

      Always always always use warnings; teach your fingers to type -wle, not -le. You are doing (print(\$fh))->input_line_number there, not print((\$fh)->input_line_number).
        OK, how about this?
        $ cat /tmp/io.pl #!/usr/bin/perl use strict; use warnings; use IO::Handle; my $filename = shift || $0; my $fh = IO::Handle->new; open $fh, $filename or die "failed on $filename: $!\n"; print((\$fh)->input_line_number, "\n") while <$fh>; #1 #print $fh->input_line_number, "\n" while <$fh>; #2 $ perl /tmp/io.pl Can't call method "input_line_number" on unblessed reference at /tmp/i +o.pl line 10, <GEN0> line 1.
        The #2 prints the line numbers correctly. Did I miss something? Please shed some light.

        Open source softwares? Share and enjoy. Make profit from them if you can. Yet, share and enjoy!