open(my $fh, "<", $file) or die("file open failed for '$file': $!"); #### X:\>perl -e "open($file) || die('file open failed');" file open failed at -e line 1. X:\>perl -e "open('xx') || die('file open failed');" file open failed at -e line 1. #### perl -e "$FILE='file_that_exists';open(FILE) || die('file open failed');" #### X:\>perl -w tmp.pl Name "main::IN" used only once: possible typo at tmp.pl line 5. Couldn't open `/tmp/test123' at tmp.pl line 5. X:\>type tmp.pl use strict; sub push_report { my $idx = shift; my $file= "/tmp/test123"; open(IN, $file) || die "Couldn't open `$file'"; } #### use strict; sub push_report { my $idx = shift; my $file= "/tmp/test123"; if (-e $file) { warn "'$file' exists"; } else { warn "'$file' does not exist"; }; if (-f $file) { warn "'$file' exists as a file"; }; if (-d $file) { warn "'$file' exists as a directory"; }; open(IN, $file) || die "Couldn't open `$file'"; }