$ perl -E 'open my $fh, ">", "xxx"; close $fb; open my $fh, ">", "yyy"' $ #### $ perl -E 'use strict; use warnings; open my $fh, ">", "xxx"; close $fb; open my $fh, ">", "yyy"' "my" variable $fh masks earlier declaration in same scope at -e line 1. Global symbol "$fb" requires explicit package name (did you forget to declare "my $fb"?) at -e line 1. Execution of -e aborted due to compilation errors. ken@ganymede: ~/tmp $ #### $ perl -E 'use strict; use warnings; { open my $fh, ">", "xxx"; } open my $fh, ">", "yyy"' $ #### use strict; use warnings; #### die "CANNOT OPEN LOG"; #### die "CANNOT OPEN LOG '$logfilename': $!"; #### select $fh; print "..."; select STDERR; print "..."; select STDOUT; print "..."; #### print $fh "..."; print STDERR "..."; print "..."; #### my $open_ok = open my $fh, $mode, $filename; if (not $open_ok) { # custom error handling here } #### #!/tps/bin/perl use strict; use warnings; use autodie; { my $logfilename = './test.log'; open my $fh, '>>', $logfilename; print $fh "..."; print "..."; } { my $logfilename = './test2.log'; no autodie 'open'; my $open_ok = open my $fh, '>>', $logfilename; use autodie 'open'; if (not $open_ok) { my $os_error = $!; print "Can't open '$logfilename': $os_error\n"; die "Can't open '$logfilename': $os_error"; } print $fh "..."; print "..."; }