sub findInterleavedString { my $string=$_[0]; my $word=$_[1]; my @letters=split //,$word; my $index=0; for(my $i=0;$i<=$#letters && $index!=-1;++$i) { $index=index $string, $letters[$i], $index+1; } return $index!=-1; } #### #!/usr/bin/perl -w use strict; use Benchmark qw(cmpthese); { my $word="sigma"; my $re = join '.*?', map quotemeta, split (//,$word); sub ikegami { my $result=1; foreach my $text ( 'sigma', 'stigma', 'magma', ) { $result &&= ($text=~$re); } } } sub ikegami_noprep { my $word="sigma"; my $re = join '.*?', map quotemeta, split (//,$word); my $result=1; foreach my $text ( 'sigma', 'stigma', 'magma', ) { $result &&= ($text=~$re); } } { my $word='sigma'; my @letters=split //,$word; sub findSigma { my $string=$_[0]; my $index=0; for(my $i=0;$i<=$#letters && $index!=-1;++$i) { $index=index $string, $letters[$i], $index+1; } return $index!=-1; } sub rmgir { my $result=1; foreach my $text ( 'sigma', 'stigma', 'magma', ) { $result &&= findSigma($text); } } } sub findInterleavedString { my $string=$_[0]; my $word=$_[1]; my @letters=split //,$word; my $index=0; for(my $i=0;$i<=$#letters && $index!=-1;++$i) { $index=index $string, $letters[$i], $index+1; } return $index!=-1; } sub rmgir_noprep { my $result=1; foreach my $text ( 'sigma', 'stigma', 'magma', ) { $result &&= findInterleavedString($text, 'sigma'); } } cmpthese -3, { ikegami => \&ikegami, ikegami_noprep => \&ikegami_noprep, rmgir => \&rmgir, rmgir_noprep => \&rmgir_noprep, };