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

use File::Find;
use Time::Local;

my $year = (gmtime)[5];

my $yt   = timegm(0,0,0,1,0,$year);

$year += 1900;
my $last = $year-1;

warn "This is $year\n";

# $expr = shift;

sub match
{
 if (/Copyright/i && /Nick/ && !/$year/)
  {
   print "$File::Find::dir/$file:$.:$_"
  }
 return 0;
}

sub wanted
{
 my $write = -w $_;
 $File::Find::prune = 0;
 if (-T $_ && !/[%~]$/ && !/\.bak/ && (stat($_))[9] >= $yt)
  {
   if (/\.c$/)
    {
     my $xs = $_;
     $xs =~ s/\.c$/.xs/;
     return if -f $xs;
    }
   local $file   = ($_);
   local ($_);
   @ARGV = ($file);
   my $changed = 0;
   $^I = '.bak';
   while (<>)
    {
     if (/Copyright/i && /Nick/ && s/--$year/-$year/)
      {
       warn "$File::Find::name:$.:$_";
       $changed++;
      }
     if (/Copyright/i && /Nick/ && /(199|200)[0-9]/ && !/$year/)
      {
       $changed++;
       unless (s/((199|200)[0-9]-)(199|200)[0-9]/$1$year/)
        {
         unless (s/$last/$last-$year/)
          {
           unless (s/((199|200)[0-9])/$1-$year/)
            {
             die "$File::Find::name:$.:$_"
            }
          }
        }
       warn "$File::Find::name:$.:$_"
      }
     print;
    }
   if ($changed)
    {
     print "p4 edit $File::Find::name\n";
    }
   else
    {
     rename("$file.bak",$file) || die "Cannot rename $file.bak to $file:$!";
    }
  }
 elsif (-d $_)
  {
   # $File::Find::prune = 1 if ($_ eq 'mTk');
  }
}

@ARGV = '.' unless (@ARGV);

find(\&wanted,@ARGV);