note
bobn
<p><tt>die</tt> is not the way to normally end execution. And <tt>for</tt> can iterate a list without indexing.
</p>
<code>
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), '"';
</code>
But I can't help but think there's a better way, such as:
<code>
# 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";
</code>
<p><b>Update:</b> added line to get min length of any filename.
</p>
<br><br>--Bob Niederman, http://bob-n.com
274114
274114