7 use POSIX qw(strftime);
10 my $fh = IO::File->new($file,'r');
11 my $fh_new = IO::File->new($file.".new",'w');
13 my $fh_contents = <$fh>;
15 my ($old_serial) = $fh_contents =~ /IN\s+SOA\s+\S+\s+\S+\s*(?:\s*\;.+\n)*\((?:\s*\;.+\n)*\s*(\d+)/;
16 my ($ymd,$iter) = $old_serial =~ /(\d{4}\d{2}\d{2})(\d{2})/;
17 my $new_serial = strftime("%Y%m%d",gmtime)."01"
18 if ($ymd == strftime("%Y%m%d",gmtime)) {
19 $new_serial = $ymd.($iter+1);
21 $fh_contents =~ s/(IN\s+SOA\s+\S+\s+\S+\s*(?:\s*\;.+\n)*\((?:\s*\;.+\n)*\s*)(\d+)/${1}${new_serial}/;
22 print {$fh_new} $fh_contents;
25 rename($file,"${file}.bak") or die "Unable to rename $file to ${file}.bak: $!";
26 rename("${file}.new",$file) or die "Unable to rename ${file}.new to ${file}: $!";
27 unlink("${file}.bak") or die "Unable to unlink ${file}.bak: $!";