lib/DNS/Vi.pm
changeset 10 efba68ef7f89
parent 8 5923d15fd57b
child 15 aa1598910bb0
--- 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;