In Perl you can multiple lvalues! In general using a subscript is not
a good idea in Perl. @ARGV is more clear than $#ARGV and you will use
the @array syntax LOTS! An "off by one error" is one of the if not, the most common error in
programming. A big advantage of Perl is that it greatly reduces this chance. Think
in term of number of things in the list, not in terms of last index in list.
Perl has a ||= operator that is often overlooked because it doesn't exist in most
languages. Here an
undef evaluates to "false", so this sets $emtocout to the default value if
not already defined, which evidently is what you want.
Also be aware that "die" prints different things depending upon whether you
put a "\n" at the end of the string or not. You get executing path and line
number if you leave off the "\n". In your opens, would be able to tell which line had the problem.
You can also apply the list slice operator to the list to begin with instead of
waiting until the print (why save something you don't need?).
my @fld = ( split(/\|/, $record ) )[0, 3..8];
#and print could look like this:
print FDOUT join("\n",@fld),"\n";
#you don't need $outrecord