眠れないので暇つぶしに

これをちょっと書き直したりしてみた。こんな感じ。

#!usr/bin/perl

use File::Basename qw/basename fileparse/;

BEGIN {
    unless (@ARGV) {
        my $self = basename $0;
        warn <<"HERE";
ERR: $self needs arguments.
      usage: $self path [path...]
HERE
        exit;
    }
}

use strict;
use warnings;

use File::Find qw/find/;
use File::Spec;
use Image::ExifTool;

my %date;
my $exif = Image::ExifTool->new;
find sub {
    if (-f) {
        my $inf = $exif->ImageInfo($_) or return;
        my $create = $inf->{CreateDate};
        if (!$create) {
            warn qq/WAR: Can't get "CreateDate" information of "$file"\n/;
            return;
        }
        foreach ($create) {
            s/://g;
            s/ /_/g;
        }
        $date{File::Spec->rel2abs($_)} = $create;
    }
}, @ARGV;

foreach my $file (sort {$date{$a} cmp $date{$b}} keys %date) {
    my (undef, $path, $ext) = fileparse($file, qr/\.[^.]+$/);
    my $old = File::Spec->abs2rel($file);
    my $new = File::Spec->abs2rel(File::Spec->catfile($path, "$date{$file}$ext"));
    
    rename $old, $new or die "ERR : $!";
    print qq/INF: Renamed successfully : "$old" -> "$new"\n/;
}

exit;

あんまり、っていうか綺麗じゃないね。使わないから別にいいや。