Ok, so you know the following:
- The file opens.
- The first line of the CSV file contains headers, as you expected.
- The file has not reached "eof" after reading the first line (because we've now tested that).
- The while loop never gets entered (because your "I'm inside the while loop" never prints.
- The only way for the loop to not be entered is for my $row = $csv->getline($fh) to return a false value.
- The documentation for Text::CSV says that 'getline' returns undef (which is false) if it fails to get and parse the line. This can happen at end of file, or in an error condition.
- You set auto_diag in the constructor, so errors are being reported. I'm assuming you would tell us if an error was being reported, so it's probably safe to say one isn't. That only leaves "end of file" as a possible reason for you to not be entering the loop.
Some of those things we know are contradictory. They can't both be true. We can't both not be at the end of the file, and be at the end of the file. We can't both have "auto_diag" set, and have an unreported error occurring.
Is your "large script" running as the same user as your test script?