# HG changeset patch # User Heiko Schlittermann (JUMPER) # Date 1400621021 -7200 # Node ID 5f07e5c283c14b0463b340adcb3e465e05a74929 # Parent 69882b806c3c20f853cfae49c7f71a5e1e1be854 [snapshot] diff -r 69882b806c3c -r 5f07e5c283c1 vidns --- a/vidns Tue May 20 00:13:19 2014 +0200 +++ b/vidns Tue May 20 23:23:41 2014 +0200 @@ -47,29 +47,27 @@ my $origin = (grep { $_->{rr} eq 'SOA' } @zone)[0]->{label}; my $ttl = (grep { $_->{rr} eq 'SOA' } @zone)[0]->{ttl}; + my $l1 = (sort map { index $_->{label}, '.' } @zone)[-1]; + my $l2 = (sort map { length $_->{rr} } @zone)[-1]; print "\$ORIGIN $origin\n"; print "\$TTL $ttl\n"; my $print = sub { - my $r = shift; - state $l1 = (sort map { length $_->{label} } @zone)[-1]; - state $l2 = (sort map { length $_->{rr} } @zone)[-1]; - state $last_label; + my %r = %{+shift}; + state $last_label;; - my $label = $r->{label} eq $origin ? '@' : $r->{label}; - $label =~ s{\.\Q$origin\E$}{}; - - my $data = $r->{data}; - if ($r->{rr} ~~ [qw(MX SOA PTR)]) { - $data =~ s{\.\Q$origin\E$}{}; - } - - my $ttl = $r->{ttl} == $ttl ? '' : $r->{ttl}; + $r{label} = '@' if $r{label} eq $origin; + $r{label} =~ s{\.\Q$origin\E$}{}; + $r{data} =~ s{\.\Q$origin\E$}{} if $r{rr} ~~ [qw(MX SOA PTR)]; + $r{ttl} = '' if ${ttl} == $ttl; + $r{label} = do { + if (defined $last_label and $r{label} eq $last_label) { '' } + else { $last_label = $r{label} } + }; my $rc = sprintf "%-*s %6s %-*s %s\n", - $l1 => defined $last_label && $label eq $last_label ? '' : $label, - $ttl, $l2 => $r->{rr}, $data; - $last_label = $label; + $l1 => $r{label}, $ttl, $l2 => $r{rr}, $r{data}; + return $rc; }; foreach (@zone) {