gianni has asked for the wisdom of the Perl Monks concerning the following question:
use 5.014; use strict; use warnings; use Time::HiRes qw(usleep ualarm gettimeofday tv_interval); use List::MoreUtils qw(uniq); ################################################### open FILE, '<textMatchInAfile.txt' or die; my $p = '\bsala|che|relazione|di|questo|coso|^qui$'; my $mR = 1; #print more rows before - after the matching my @n = <FILE>; &sub1( $p, $mR, @n ); #suggest: insert references &sub3( $p, $mR ); ################################################### sub sub1 { #questa sub usa perl grep my $p = $_[0]; #pattern my $mR = $_[1]; #more rows my @n = @_[ 2 .. $#_ ]; #input File my $time = [gettimeofday]; my @new = grep { $n[$_] =~ /$p/ } 0 .. $#n; my @unique = map { @n[ $_ - $mR .. $_ + $mR ] } @new[ 0 + $mR .. $#new - $mR +]; say "\n" . 'time sub1 perl grep: ' . tv_interval($time); @unique = uniq(@unique); say "sub 1 $#unique"; } ############################################# sub sub3 { #unix grep with color and line numbers my $p = $_[0]; my $mR = $_[1]; my $cmd = "grep -n -C $mR"; #with line numbers $p =~ s/\|/ /g; $p =~ s/\h+/" -e "/g; $p = ' -e "' . $p . '" '; say "cmd ===$cmd=== ss ===$p==="; my @values; $values[0] = $p; $values[1] = ( ' ' . 'textMatchInAfile.txt' ); #lasciare lo spa +zio my $time = [gettimeofday]; my @valori = `$cmd @values` or die "system @values` failed: $?"; say 'sub3 egrep shell: ' . $#valori; say 'time sub3 tempo trovati con egrep shell ' . tv_interval($time +); my @uniq_list = uniq(@valori); } ############################################# sub sub6 { #perl ack my $p = $_[0]; #pattern my $mR = $_[1]; #more rows my @values; my $time = [gettimeofday]; my @valori = qx (ack -C $mR "$p" textMatchInAfile.txt) or die "system @values` failed: $?"; say 'number of values found with ack' . $#valori; say 'time sub6 ack' . tv_interval($time); }
|
|---|