On Tue Nov 17 2009 @ 11:23, Parag Kalra wrote: > Now if want to again the loop through the contents of the file I was not > able to do the following again: > > while ( <FILE> ) { > print "$_\n"; > } > > Instead I had to first close the previous file handler and the again open > the file to loop through the file i.e few more following steps: > > close FILE; > > open FILE, "my_file.out"; > while ( <FILE> ) { > print "$_"."----"."$_\n"; > } > close FILE; > > Can't this again closing and opening of file avoided while looping through > the file?
Part of what happens when you go through a file line by line using readline (in your code <> is simply a prettier way of writing readline) is that Perl keeps track of where you are in the file. That way, successive calls get successive lines. Once you've gone through the whole file, you're at the end, so you can't simply pick up and read again. However, you can use the function seek to reset the pointer to the top of the file: seek(FILE, 0, 0) See perldoc -f seek. While we're not on the subject, you shouldn't be using bareword filehandles like FILE, but you *should* always check that the file opened properly. See the documentation for open for how to use lexical filehandles, but it would look something like this: open my $fh, '<', 'my_file.in' or die "Can't open 'my_file.in' for reading: $!"; while (<$fh>) { # do stuff to the line } See perldoc -f open and perldoc perlopentut for more. (You're also overquoting. I think someone mentioned it to you, but I'll throw in my two cents there too.) -- To unsubscribe, e-mail: beginners-unsubscr...@perl.org For additional commands, e-mail: beginners-h...@perl.org http://learn.perl.org/