Well, more perlish way to do some of this:
if ( /^Subject:\D+(\d+)/ ){
# if you can be sure of the '#' before the digits, use this
# if ( /^Subject:.*#(\d+)/ ) not that it buys you much
push @subject, $1;
next;
} # if /subject
...
push is much better than your $i++ which may be getting
messed up, the way your snippet looks. I'm guessing
your open(OUTPUT ... is supposed to be outside
the while {...}.
Not as snazzy as the ever terse, er, tidy io's suggestion,
but:
if ( /\s*Out Comments\s*(.*)$/ ) {
push @out_comments, $1;
while (<>) {
# quit on a blank line or -------
last if /^\s*$/ or /^\s*[-]+\s*$/;
s/^\s*//; # get rid of spaces at the beginning
push @out_comments, $_;
}
next;
} # if /Out Comments/
not the 'strictest' of methods (re-while-ing
the <> is frowned on by pendants) but if you're
confident of your data format, it works. I get the
impression you expect only one msg per email, so your
arrays aren't needed, so scalars might be better (that is,
$i is usually ends up '1'). Just do "$subject = $1;" and
"$out_comment .= $_;" for the inner while loop. You'll
avoid typos by:
$output_str = "@subject[$j];@failed[$j];@monthi[$j]/@dayi[$j]/@yeari[$
+j];@routerval[$j];" .
"@tag[$j];@montho[$j]/@dayo[$j]/@yearo[$j];@lotCode[$j];@com
+mentso[$j]\n";
# or, if you've gone to scalars
$output_str = "$subject;$failed;$monthi/$dayi/$yeari;$routerval;" .
"$tag;$montho/$dayo$/$yearo;$lotCode;$commentso\n";
print OUTPUT $output_str;
print $output_str;
And, last but definitely not least; perl -w/use strict, if
you're gonna use the tools, use them *safely*. You'll be glad
you did later on.
a