Mrtlc wrote: > > I wrote the following script as a windows tail + count function, > but it's too slow if the input is huge, how can it be improved? > > if (!$ARGV[0]){ > die("you've forgotten to enter the file name\n"); > } > if (!$ARGV[1]) { > $n = 9; # output 10 rows by default > } > else { > $n = $ARGV[1]-1; > } > > open IN, "$ARGV[0]" or die; > > @_ = <IN>; > > foreach my $i(($#_-$n)..$#_){ > print $_[$i]; > } > > close IN; > > $i = $#_+1; > printf "-------\nTotal # of rows: $i\n";
A more Perlish way to do it: use warnings; use strict; @ARGV == 2 and my $n = pop || 10; $n--; @ARGV or die "you've forgotten to enter the file name\n"; my @tail; while ( <> ) { push @tail, $_; shift @tail if @tail > $n; } print @tail; print "-------\nTotal # of rows: $.\n"; __END__ John -- use Perl; program fulfillment -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]