sub Prefix { my ($m,$n) = (sort @_)[0,-1]; my $dif = $m ^ $n; my $len= length( ( $dif =~ /^(\0*)/ )[0] ); substr( $m, 0,$len ); } #### use Benchmark; @files = qw(model4run1 model2run1 model4run2); sub antirice { my ($m,$n) = (sort @_)[0,-1]; my $dif= $m ^ $n; $len= length( ( $dif =~ /^(\0*)/ )[0] ); substr( $m, 0,$len ); } # not picking on Jenda, but he seems to have the fastest prior sub sub Jenda { my $first = shift(@_); my $and = $first; my $or = $first; foreach (@_) { $and &= $_; $or |= $_; } my $combined = $and ^ $or; $combined =~ s/[^\x00].*//; substr($first, 0, length($combined)); } print "Jenda: " . Jenda(@files) . "\n"; print "antirice: " . antirice(@files) . "\n"; timethese 100000, { Jenda => sub {Jenda(@files)}, antirice => sub {antirice(@files)} } __DATA__ Jenda: model antirice: model Benchmark: timing 100000 iterations of Jenda, antirice... Jenda: 1 wallclock secs ( 0.82 usr + 0.00 sys = 0.82 CPU) @ 121904.76/s (n=100000) antirice: 1 wallclock secs ( 0.75 usr + 0.00 sys = 0.75 CPU) @ 133333.33/s (n=100000)