On Fri, Feb 17, 2012 at 4:32 PM, lina <lina.lastn...@gmail.com> wrote:

> Hi,
>
> I have a file,
>
>  cat try.xpm
> a 1
> b 2
> c 3
> d 4
>
> abbbcaaaadddb
>
>
> I wish to use perl to translate the last line into the numerical value.
>
> #!/usr/bin/perl
>
> use warnings;
> use strict;
>
> open FILE, "<try.xpm" or die $!;
>
> my @line = <FILE>;
>
> while (<FILE>) {
>        print $_;
> }
>
> strangely it print me nothing out,
>
> Thanks for any suggestions,
>
> Best regards,
>
> --
> To unsubscribe, e-mail: beginners-unsubscr...@perl.org
> For additional commands, e-mail: beginners-h...@perl.org
> http://learn.perl.org/
>
>
>
Hi thats not that strange look at what you are doing...

#!/usr/bin/perl

use warnings;
use strict;
 # So far so good
open FILE, "<try.xpm" or die $!; # Open the file no problem there though I
would use a variable instead of a handle like that but I'll leave that up
to others to complain about ;-)

my @line = <FILE>; # Read the entire file to @line

while (<FILE>) { # Read the FILE handle till the end of the file is reached
(you already got there in the previous step so this will instantly return)
       print $_; # Yeah that should work providing that you get into the
loop
}

Of course you could put the cursor back at the beginning of the file after
you shove it all into @line or you could remove that step. Another option
could be to loop over @line rather then over the file. Now there is one
thing to mention here and that is if you as it is called slurp a file into
memory as you do with the my @line = <FILE>; statement you might depending
on the size of the file get in problem with the memory available on your
system. Now a days most computers have GB's of memory but a lot
of operating systems limit the amount of memory they will normally allocate
to a process to a certain amount given that other programs also like to use
some of that memory so it is usually not a bad idea to have a good think
about if you really need to shove it all into memory or if you could live
with processing the data one line at a time storing only that information
that you really need rather then all the information available to you.

Regards,

Rob

Reply via email to