I’m writing a perl script that reads a file into an array. I wrote the program on Windows, using Perl 5.16 (it also works on 5.14), and the script failed using a Mac with Perl 5.12.
The part that failed is this: my @array = <$file>. On the Mac, the array came back the correct size (same as number of lines in the file), but every element except the last one was empty. The code worked correctly when I switched to this instead:
my @array;
while(<$file>){
push @array, $_;
}
I’m not sure if it would have made a difference if I switched the line endings to be LF instead of CRLF (Windows style). Though the problem is fixed, it leaves me puzzled. I thought those two code snippets I listed were exactly the same thing. What is the difference in them that produces different results here?
The answer is that the two methods are exactly equivalent, as you suspected. Example:
Your previous failure was likely something else. Perhaps some sort of problem with Perl on Mac or Mac’s file IO was involved, but more likely it was some other part of your code (by this I mean nothing personal: I would make the same assumption about my own code).