Another large bug in your code is that due to operator precedence, your dies won't work.
Basically, open FILE1,">$_[0]" || die "could not open $_[0]" is being interpreted as open FILE1,(">$_[0]" || die "could not open $_[0]")
$ perl -MO=Deparse -e 'open INP, "<", "hello" || die $!'
+
open INP, '<', 'hello';
-e syntax OK
$ perl -MO=Deparse -e 'open(INP, "<", "hello") || die $!'
+
die $! unless open INP, '<', 'hello';
-e syntax OK
$ perl -MO=Deparse -e 'open INP, "<", "hello" or die "could not open:
+$!"'
die $! unless open INP, '<', 'hello';
-e syntax OK
You either need to use the lower-precedence or operator or call the open() function with parentheses. |