AA
AB
ABC
ABCDE
####
AA
AB
AB
AB
####
AA
AB
ABC
ABCD
####
#!/usr/bin/perl -lw
use strict;
chomp( my @lines = );
# find shortest line
my @foo = sort { length $a <=> length $b } @lines;
my $diff = $foo[0];
LINES:
for (@lines) {
# the longest common substring can only be as long
# as the shortest line
my $line = substr $_, 0, length $diff;
while( $line ) {
if ( $line eq $diff ) {
$diff = $line;
next LINES;
}
else {
# reduce current line and recent common string by one
$line = substr $line, 0, -1;
$diff = substr $diff, 0, -1;
}
}
}
for( @lines ) {
print substr $_, 0, length( $diff ) + 1;
}
__DATA__
AA
AB
ABC
ABCDE