=head1 get_rcode_info

Suche in der Deskriptoren-Tabelle "dns_rcodes" einen Erlaeuterungstext zu einem
DNS-RCODE gemaess RFC 2136.

=head2 Argumente

=over 4

=item $rcode

Kurzname (z. B. "SERVFAIL") oder Nummer des DNS-RCODES.

=back

=head2 Ergebnis

=over 4

=item in Listenkontext

Falls der angegebene RCODE nicht bekannt ist, eine leere Liste.

Falls kein (vom RCODE-Kurznamen abweichender) Erlaeuterungstext angegeben ist,
eine Liste mit zwei Elementen, naemlich der RCODE-Nummer und dem
RCODE-Kurznamen.

Falls doch: eine Liste analog zu oben, jedoch mit dem Info-Text als drittem
Argument.

=item in skalarem Kontext

Der Info-Text, sofern angegeben und abweichend vom Kurznamen, sonst
L<undef|perlfunc/undef>.

=back

=cut

use utf8;
use warnings; no warnings "redefine";
use strict;
use Dbase::Globals qw(find_descr get_descr info_descr);
use Memoize qw(memoize);

sub get_rcode_info($) {
	my ($rcode) = @_;
	my ( $rcode_nr, $rcode_text );
	defined( $rcode =~ y/0-9//c
		? ( $rcode_nr =  find_descr dns_rcodes => ( $rcode_text = $rcode ) )
		: ( $rcode_text = get_descr dns_rcodes => ( $rcode_nr   = $rcode ) ) )
	  or return;
	my $rcode_info = info_descr dns_rcodes => $rcode_nr;
	if (wantarray) {
		$rcode_nr,
		$rcode_text,
	  	defined $rcode_info && $rcode_info ne $rcode_text ? $rcode_info : ();
	} else {
		defined $rcode_info && $rcode_info ne $rcode_text ? $rcode_info : undef;
	}
}

memoize 'get_rcode_info';

1;
