The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl
# update_version.pl     pajas@ufal.ms.mff.cuni.cz     2007/01/02 09:46:10

use warnings;
use strict;
$|=1;

my $VERSION_FROM = shift;
my $version=`grep '\# VERSION TEMPLATE' "$VERSION_FROM"`;
$version =~ /#\ VERSION TEMPLATE/
  or die "Didn't find version template in $VERSION_FROM";
print "New version line: $version";

for my $module (@ARGV) {
  rename $module, $module.'~' || die "Cannot create backup for $module\n";
  open my $in, $module.'~' || error($module,"Cannot open ${module}~ for reading: $!");
  open my $out, '>',$module || error($module, "Cannot open ${module} for writing: $!");

  while (<$in>) {
    if (/#\ VERSION TEMPLATE/) {
      print "Updating version number in $module\n";
      $_=$version;
    }
    print $out $_;
  }

  my $perm = (stat $in)[2];
  chmod($perm, $out);
  
  close $out;
  close $in;
}
 
sub error {
  my ($module, $error)=@_;
  rename $module.'~', $module || die "Cannot revert backup for $module after error: $error\n";
  die $error;
}