use strict; my $infile = 'c:/RZ_Q.008'; # is it the same input file every time? #### my ( $yr, $mo, $dy ) = (localtime)[5,4,3]; my $outfile = sprintf( "%04d%02d%02d.txt",$yr+1900,$mo+1,$dy ); # (I tend to format date-as-filename so that it will be # easy to sort file names chronologically: YYYYMMDD) # you can add hours and minutes, if you like -- check # `perldoc -f localtime`... #### # (assign $infile, $outfile as above, open IN, OUT as in your post, then: while () { print OUT unless ( /774(0[346789]|1[123468])/ ); } # but if the set of numerics to exclude changes regularly, # you'll want to figure out how to convey the proper set # to the script on start-up, and construct a regex along the # lines shown in your original code.