Maybe you can adopt this, I call it floyd
#!/usr/bin/perl --
use strict;
use warnings;
my(@list ) = sort qw[
abcpwbln08
abcpwbln07
abcpwbnn10
abcpwbnn06
adesicln09
adesicln08
adesicln01
adesicnn05
];
use Data::Dumper;
my $len = length 'abcpwbnn';
my $ret = floyd( \@list, $len, ) ;
print Dumper($ret),"\n";
for my $ar( @$ret ){
if($#{$ar} > 0){
print substr $ar->[0], 0, $len;
print "*\n";
} else {
print $ar->[0],"\n";
}
}
sub floyd
{
my ( $input, $len ) = @_;
my %output;
keys %output = scalar @$input; #presize %output, max possible
my @keys;
my $num_keys_l = 0;
for my $i( @$input ){
my $ikey = substr $i, 0, $len;
push @{$output{$ikey}}, $i;
my $nkeys = 0+ keys %output;
if( $nkeys > $num_keys_l ){
$num_keys_l = $nkeys;
push @keys, $ikey;
}
}
return [ @output{@keys} ];
}
__END__
$VAR1 = [
[
'abcpwbln07',
'abcpwbln08'
],
[
'abcpwbnn06',
'abcpwbnn10'
],
[
'adesicln01',
'adesicln08',
'adesicln09'
],
[
'adesicnn05'
]
];
abcpwbln*
abcpwbnn*
adesicln*
adesicnn05
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.