Such that it gives this result:#!/usr/bin/perl -w use strict; use Data::Dumper; use String::Approx qw\amatch\; use Benchmark 'cmpthese'; #----------Begin Benchmarking-------------- my $str = 'AAAAA'; my @arr = ('AAAAA','ATAAA','ATCGA','ATCAA'); my @my_match = mymatch($str,2,\@arr); print Dumper \@my_match; my @jk_match = amatch($str,['2'],@arr); print Dumper \@jk_match; #It fails here cmpthese (-5,{ me => "mymatch($str,2,\@arr)", jk => "amatch($str,['2'],@arr)",}); #------------------ Subroutine ------------- sub mymatch { my ($pattern, $d, $arr_2match) = @_; my @matches; foreach (@$arr_2match){ my $diff = hd($pattern,$_); #print "$_ --- Diff: $diff\n"; if ($diff <= $d){ push @matches, $_; } } return @matches; } sub hd { #String length is assumed to be equal my ($a,$b) = @_; my $len = length ($a); my $num_match=0; for (my $i=0; $i<$len; $i++) { # assume that the lists are of same length ++$num_match if substr($a, $i, 1) ne substr($b, $i, 1); } return $num_match; }
Is Benchmark only cater for Perl written subroutine/module? Is there a way to overcome it?[snip others] Can't locate object method "ATCGA" via package "ATCAA" (perhaps you forgot to load "ATCAA"?) at (eval 7) line 1.
In reply to Benchmarking String::Approx by monkfan
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |