Fat chance.Теперь внимательно следим за руками...
zulu@ubivaj:~$ time ./1.pl master97_engl.txt Linux FreeBSD Solaris Cisco Opennet Bash pronounced Compilation Robbins Gentoo Portability SPARC OpenBSD Hurd OpenSolaris Linux FreeBSD Solaris Cisco Opennet Bash pronounced Compilation Robbins Gentoo Portability SPARC OpenBSD Hurd OpenSolaris Linux FreeBSD Solaris Cisco Opennet Bash pronounced Compilation Robbins Gentoo Portability SPARC OpenBSD Hurd OpenSolaris Linux FreeBSD Solaris Cisco Opennet Bash pronounced Compilation Robbins Gentoo Portability SPARC OpenBSD Hurd OpenSolaris | md5sum
ac6be5f73a40e52d868609be26343bc1 -
real 0m3.571s
user 0m3.570s
sys 0m0.000s
zulu@ubivaj:~$ time ./2.pl master97_engl.txt Linux FreeBSD Solaris Cisco Opennet Bash pronounced Compilation Robbins Gentoo Portability SPARC OpenBSD Hurd OpenSolaris Linux FreeBSD Solaris Cisco Opennet Bash pronounced Compilation Robbins Gentoo Portability SPARC OpenBSD Hurd OpenSolaris Linux FreeBSD Solaris Cisco Opennet Bash pronounced Compilation Robbins Gentoo Portability SPARC OpenBSD Hurd OpenSolaris Linux FreeBSD Solaris Cisco Opennet Bash pronounced Compilation Robbins Gentoo Portability SPARC OpenBSD Hurd OpenSolaris | md5sum
ac6be5f73a40e52d868609be26343bc1 -
real 0m0.717s
user 0m0.700s
sys 0m0.020s
Как несложно заметить, результаты те же за в 5 раз меньшее время. А какая разница между скриптами?
zulu@ubivaj:~$ diff -c 1.pl 2.pl
*** 1.pl 2009-11-09 00:26:33.058344645 +0100
--- 2.pl 2009-11-09 00:31:51.240868198 +0100
***************
*** 1,3 ****
#!/usr/bin/perl
open(F,shift @ARGV);
! for $l (<F>) { for (@ARGV) { print $l and last if ($l =~ $_) } };
--- 1,4 ----
#!/usr/bin/perl
open(F,shift @ARGV);
! @a = map { qr{$_} } @ARGV;
! for $l (<F>) { for (@a) { print $l and last if ($l =~ $_) } };
Говорите, питон на 30% быстрее? Догоняйте теперь пятикратный отрыв. Целую))