Perl Mail User wrote:
> 
> Hello All,

Hello,

> I have a basic question, I am new to perl, and I would like to try
> and get a basic question answered, if possible.  I have a file with
> about 63 lines in it, I am running it through a basic perl program
> that reads every line and prints it to the screen.  I am trying to
> get the output of each line into an @array, but all I am getting is
> the last line in the file. Any help would be great.
> 
> Script .... Like I said it is basic.
> 
> __begin__
> 
> #!/usr/bin/perl
> 
> open(FILE, "file1.txt") || die "Can not open file.  $! \n";

Very good.

> while ($line = <FILE>) {
>     if ($line =~ /:58/) {

You imply above that you want every line from the file but this means
that you only want lines that have the string ':58' in them and if all
the lines have the string ':58' in them then what is the point in
testing for the string?

>       #print $line; ## For Debugging Only
>         foreach ($line) {

foreach (and for) are used to iterate through a list but since you only
have one item in the list and you are not using foreach to modify the
items in the list you don't really need a foreach loop here.

>             @lines = $line;

This always assigns $line to $lines[0] so @lines will only have the last
value assigned to it.  You probably want to use push() to assign $line
to the end of @lines without overwriting the previous elements of
@lines.

              push @lines, $line;

>         }
>     }
> }
> print "@lines";

That is the same as:

print join( $", @lines );

And since $" normally has the value ' ' (a single space character) that
will add a space between all the lines from the file which you haven't
seen so far because you only had one line in @lines.

> __end__


This is probably what you want:

#!/usr/bin/perl
use warnings;
use strict;

open FILE, 'file1.txt' or die "Can not open file1.txt  $! \n";
my @lines;
while ( my $line = <FILE> ) {
    if ( $line =~ /:58/ ) {
        #print $line; ## For Debugging Only
        push @lines, $line;
    }
}
print @lines;


Or you could simplify that a bit:

#!/usr/bin/perl
use warnings;
use strict;

open FILE, 'file1.txt' or die "Can not open file1.txt  $! \n";
my @lines = grep /:58/, <FILE>;
print @lines;



John
-- 
use Perl;
program
fulfillment

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>


Reply via email to