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

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!

  • Comment on Re^2: Last Line Read? (Any way to use IO::Handle methods on a "First-Class" Filehandle?)
  • Download Code

Replies are listed 'Best First'.
Re^3: Last Line Read? (Any way to use IO::Handle methods on a "First-Class" Filehandle?)
by ysth (Canon) on Jun 08, 2007 at 08:22 UTC
    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!

        Did I miss something?
        Just that I was trying to answer the parenthetical question in the title.
        $ perl - foo use strict; use warnings; use IO::Handle; my $filename = shift || $0; my $fh = do {local *FH}; 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 __END__ Name "main::FH" used only once: possible typo at - line 6. 1 2 3 4 5 6 7 8 9 10