in reply to Find common prefix from a list of strings
die is not the way to normally end execution. And for can iterate a list without indexing.
But I can't help but think there's a better way, such as:my $posn = -1; my $same = 1; while(defined $same and $posn <= length $files[0]){ my $chr = substr($files[0], ++$posn, 1); for my $name (@files) { undef $same and last if(substr($name, $posn, 1) ne $chr or length $name < $posn); } } print 'Prefix is "', substr($files[0], 0, $posn), '"';
# UNTESTED $max = ( sort { $a <=> $b } map { length } @files )[0]; # length of smallest filename - I hope. LIST: for $len ( 1..$max) ) { $s = substr($file[0],0,$len); last LIST unless scalar grep { /^$s/ } @files == @files; # precedence issue here? } print "prefix: '",substr($file[0],1,$len-1), "'\n";
Update: added line to get min length of any filename.
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: Re: Find common prefix from a list of strings
by Albannach (Monsignor) on Jul 14, 2003 at 19:58 UTC | |
by bobn (Chaplain) on Jul 14, 2003 at 20:05 UTC | |
by bobn (Chaplain) on Jul 14, 2003 at 20:08 UTC |