The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/env perl

use 5.01;
use strict;
use warnings;
use version; our $VERSION = qv( '0.4' );

use English qw( -no_match_vars );

my $message_file = $ARGV[ 0 ]; my $change_file = 'Changes';

if (-f $change_file) {
   open my $in, '<', $message_file
      or die "Path ${message_file} cannot open: ${OS_ERROR}";

   my $message; { local $RS = undef; $message = <$in> }; close $in;

   open $in, '<', $change_file
      or die "File ${change_file} cannot open: ${OS_ERROR}";

   my $changes; { local $RS = undef; $changes = <$in> }; close $in;
   my ($ver)   = $changes =~ m{ ^ v? ([0-9]+[.][0-9]+) }mx; $ver ||= '0.1';
   my ($entry) = $changes =~ m{ [\n][\n] (.*?) [\n][\n] }msx;

   $entry =  join q( ), map    { s{ \A [ \t]+ }{}mx; $_ }
                        grep   { m{ \A [ \t]    }mx     }
                        split    m{    [\n]     }mx, ($entry || ' - Updated');
   $entry =~ s{ \A [\-] \s* }{}mx;
   $entry =  (split m{ [\-] }mx, $entry)[ 0 ];

   $message = length $message > 1 ? "${ver} ${message}" : "${ver} ${entry}";
   $message = substr $message, 0, 53;

   open my $out, '>', $message_file
      or die "Path ${message_file} cannot open: ${OS_ERROR}";
   print {$out} $message; close $out;
}

exit 0;