--- 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) {