use strict; my $plus; my $minus; while () { chomp; my $next = next_seq($_); my $previous = previous_seq($_); print "$_, $next, $previous\n"; } sub next_seq { my $pattern = shift; chomp $pattern; if ($pattern =~ m/(.*?)(\d+)$/) { return $1 . ($2 + 1); } else { $pattern =~ m/(.*)(.)/; return $1 . chr(ord($2) + 1); } } sub previous_seq { my $pattern = shift; chomp $pattern; if ($pattern =~ m/(.*?)(\d+)$/) { return $1 . ($2 - 1); } else { $pattern =~ m/(.*)(.)/; return $1 . chr(ord($2) - 1); } } __DATA__ AAA30 BBC5 SHT12H DAL33B BBC49 AAA31 DAL33A BBC6 SHT12G BBC50 ABCZ