Yet another brief addition: the message $! tells you the
cause of the addition, but not the source.
Zaxo already
told you that leaving that newline out makes
die tell
the terminal which line of code generated that error.
However, that's not immediately informative. The command
probably interpretets a variable to generate the syscall,
so in general it's a good idea to provide that information :
open( INPUT, $filename ) or die "Could not open $filename: $!";
# or
rename( $old, $new ) or die "Could not rename $old to $new: $!";
As a third step, you can use Carp to print out the chain
of callers. This is useful when your code
is distributed over more than one file.