The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl
# Simple demo of Parse::DNS::Zone, dump zone to stdout in a simple computer
# parseable format.
use strict;
use warnings;
use Parse::DNS::Zone;

if($#ARGV != 1) {
	die("usage: perl example.pl <zonefile> <origin>");
}

my $file = shift;
my $origin = shift;

$origin .= '.' if $origin !~ /\.$/;

my $zone = Parse::DNS::Zone->new(
	zonefile => $file,
	origin => $origin,
);

foreach my $name ($zone->get_names) {
	foreach my $rr ($zone->get_rrs($name)) {
		for(my $i=0; $i<$zone->get_dupes(name=>$name, rr=>$rr); ++$i) {
			my $class = $zone->get_rdata(
				name=>$name, 
				rr=>$rr, 
				n=>$i,
				field=>'class'
			);

			my $ttl = $zone->get_rdata(
				name=>$name, 
				rr=>$rr, 
				n=>$i,
				field=>'ttl'
			);

			my $rdata = $zone->get_rdata(
				name=>$name, 
				rr=>$rr, 
				n=>$i,
			);

			print "$name ",uc$class," $ttl ",uc$rr," $rdata\n";
		}
	}
}