in reply to Re^2: Testing <> for undefined
in thread Testing <> for undefined

I have to say that I hate your use of the trinary operator there. You're expressing that you want to assign die's result to $file. Instead:
my $file = $ARGV[0] or die "Usage: prog.pl file_pathname\n";
(as a bonus, you don't have the redundant mention of $ARGV[0]).
Better, if the filename might be zero:
@ARGV or die "Usage: prog.pl file_pathname\n"; my $file = $ARGV[0];

We're not really tightening our belts, it just feels that way because we're getting fatter.