noobee has asked for the wisdom of the Perl Monks concerning the following question:

Hi Folks, I have a text file as below:
asdsadsd /* asds wqeoiywe qwe qwewewe oooooo sadssdsa

In order to process the above kind of text file, I wrote the following code:
#!/usr/bin/perl use warnings; use strict; package main; my $file = './test_file'; my $line = inFile->new($file); print $line->getLine(); package inFile; sub new { my $class = shift; my $self = { fname => shift, fp => undef, lineno => 0, buff => [] }; my $fname = $self->{fname}; open($self->{fp},"< $fname") || die "failed to open the file $fname + ($!)\n"; bless $self, $class; } sub getLine { my ($self) = @_; my $fp = $self->{fp}; my $buf = $self->{buff}; if (@{$buf}) { $self->{lineno}++; return shift @{$buf}; } my $line; while ($line = <$fp>) { $self->{lineno}++; chomp $line; next if $line =~ /^\s*$/; return $line; } return undef; }

When I execute the above code, the result I get is only the first line
But what I want to do is process the whole file and print each of the lines. Can you please point out what I am doing wrong?

Replies are listed 'Best First'.
Re: text file reading
by GrandFather (Saint) on Dec 18, 2007 at 02:27 UTC

    Replace your print line with:

    print "$_\n" while $_ = $line->getLine();

    Perl is environmentally friendly - it saves trees
      Thank you. That works perfect!
Re: text file reading
by pfaut (Priest) on Dec 18, 2007 at 02:18 UTC

    The getLine routine reads the file until it finds a non-blank line or end of file. You only called it once so you only read one line from the file. If you want to read them all, you need to loop on print $line->getLine(); until it returns undef.

    90% of every Perl application is already written.
A reply falls below the community's threshold of quality. You may see it by logging in.