[snapshot]
authorHeiko Schlittermann (JUMPER) <hs@schlittermann.de>
Tue, 20 May 2014 23:23:41 +0200
changeset 1 5f07e5c283c1
parent 0 69882b806c3c
child 2 1e26b0942c13
[snapshot]
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) {