So when would using foreach be better?
Neither is better because they're not interchangeable. for (@array) loops for every element in the array, while while (@array) loops while the array isn't empty.
There's no reason to use for (<$fh>).
| [reply] [d/l] [select] |
My wording is a little vague b/c it's mainly a follow up to the question I linked (I didn't want to hijack that thread).
How can I process large files with while(<>)?
Briefly - he opened a file, read the file handle into an array, and processed the array with a foreach loop. The problem seemed to be that the file was too big to read entirely into an array. So the solution was to go line by line on the file with while<HANDLE>.
I haven't been using perl all that long. I learned to process files with the former method using foreach, and only recently learned about while<HANDLE>. That's why I'm asking when to use which.
| [reply] [d/l] [select] |
If you want a line at a time, while (<$fh>) is perfect.
An array would be useful if you need to go through the file multiple times. Or if you need to traverse the file in an odd order. Or if you want to sort the contents. Sometimes, I'll load the entire file into memory so I can use grep or map, although I tend not to use an array in between.
And then there times when you want to load the entire file into a string, so you'd use local $/; $text = <$fh>;.
And then there are files which don't have a concept of lines, so you'd use read or sysread.
One this is for certain is that there is no reason to do @a = <$fh>; for (@a) unless you do something else with @a. That's the same thing as doing for (<$fh>), and there's no reason for that.
| [reply] [d/l] [select] |