\nopen DEVICE, $file || die "Cannot open $file: $!\\n";\n
Either:
open (DEVICE, $file) || die "Cannot open $file: $!\\n";
or
open DEVICE, $file or die "Cannot open $file: $!\\n";
but NEVER
open DEVICE, $file || die "Cannot open $file: $!\\n";
The "or" has lower precedence. You can get into a situation where logic on the right hand side of the || gets executed before the open. Very bad habit.