I thought of the function index first, which gets the position of a string (or character, in this case).
my $seq = "XX**XXX!!!X**AB*!C*DXX*!!!XXX**XXX";
# The code presumes that it's a correct sequence.
# If you're getting the sequence from somewhere else you
# should check it to make sure it contains the right letters.
print "#" . index($seq, "A") . "-#" . index($seq, "D") . "\n";
This is the easiest way; your method works too, but it would involve splitting up the string and operating on that, so using index is easier.