--- a/lib/DNS/Vi.pm Fri May 23 11:48:42 2014 +0200
+++ b/lib/DNS/Vi.pm Fri May 23 13:04:19 2014 +0200
@@ -1,3 +1,4 @@
+package DNS::Vi;
use 5.010;
use strict;
use warnings;
@@ -6,7 +7,7 @@
use base 'Exporter';
-our @EXPORT = qw(ttl2h h2ttl parse delta);
+our @EXPORT = qw(ttl2h h2ttl parse delta nice);
our @EXPORT_OK = ();
sub parse {
@@ -117,20 +118,21 @@
}
sub nice {
+ my %order = map { state $n = 0; $_ => ++$n } qw(SOA NS TXT MX A AAAA);
# get a list of { id => $id, rrset => \%rrset }
my @zone =
sort {
length $a->{label} <=> length $b->{label}
- or $a->{label}
- cmp $b->{label}
+ or $a->{label} cmp $b->{label}
+ or ($order{$a->{rrtype}}//99) <=> ($order{$b->{rrtype}}//99)
} map { $_->{rrset} } @_;
my @out;
my $origin = (grep { $_->{rrtype} eq 'SOA' } @zone)[0]->{label};
my $ttl = (grep { $_->{rrtype} eq 'SOA' } @zone)[0]->{ttl};
- my $l1 = (sort map { index $_->{label}, '.' } @zone)[-1];
- my $l2 = (sort map { length $_->{rrtype} } @zone)[-1];
+ my $len1 = (sort map { index $_->{label}, '.' } @zone)[-1];
+ my $len2 = (sort map { length $_->{rrtype} } @zone)[-1];
push @out, "\$ORIGIN $origin", "\$TTL " . ttl2h($ttl);
my $print = sub {
@@ -147,9 +149,9 @@
};
return sprintf '%-*s %6s %-*s %s',
- $l1 => $r{label},
+ $len1 => $r{label},
$r{ttl},
- $l2 => $r{rrtype},
+ $len2 => $r{rrtype},
$r{data};
};
push @out, $print->($_) foreach @zone;