http://www.perlmonks.org?node_id=631123


in reply to searching for strings

Late as usual I see...
Here is my suggestion
#!/usr/bin/perl use strict; { local %_; while(<DATA>){ chomp; if(/(\d+|[A-Z])$/){ $_{substr($_,0,(length($_)-length($1)))}->{$1} = $_; } } for(sort keys %_){ if(scalar(keys %{$_{$_}}) % 2 == 0){ local @_ = sort{$a <=> $b || ord($a) <=> ord($b)}keys %{$_ +{$_}}; for(my $i = 0; $i < scalar(@_); $i+=2){ if( ($_[$i] =~ /\d$/ && abs($_[$i] - $_[$i+1]) == 1) | +| (abs(ord($_[$i]) - ord($_[$i+1])) == 1) ){ print $_{$_}->{$_[$i]}.";".$_{$_}->{$_[$i+1]}."\n" + ; print $_{$_}->{$_[$i+1]}.";".$_{$_}->{$_[$i]}."\n" + ; } } } } } __DATA__ AAA30 BBC5 SHT12H DAL33B BBC49 AAA31 BBC8 BBC3 DAL33A BBC6 SHT12G BBC50
Output
AAA30;AAA31 AAA31;AAA30 BBC49;BBC50 BBC50;BBC49 DAL33A;DAL33B DAL33B;DAL33A SHT12G;SHT12H SHT12H;SHT12G
Not exactly the OP's output but close...
Just a thought :)

-InjunJoel
"I do not feel obliged to believe that the same God who endowed us with sense, reason and intellect has intended us to forego their use." -Galileo