sub MakeCode($$$) { my @date1 = split /[: ]/, shift; my @date2 = split /[: ]/, shift; my $name = shift; my $years = $date1[0] - $date2[0]; my $months = $date1[1] - $date2[1]; my $days = $date1[2] - $date2[2]; if ($days < 0) { --$months; } if ($months < 0) { $months += 12; --$years; } my $str = ''; $str .= "${years}Y" if $years > 0; $str .= "${months}M" if $months > 0 and $years >= 0; $str = "_$name$str" if $str; return $str; } %Image::ExifTool::UserDefined = ( 'Image::ExifTool::Composite' => { MyFileName => { Desire => { 0 => 'Make', 1 => 'DateTimeOriginal', 2 => 'CreateDate', 3 => 'FileModifyDate', }, ValueConv => sub { my $vals = shift; my $make = $$vals[0]; my $date = $$vals[1] || $$vals[2] || $$vals[3] or return undef; my $daughter = MakeCode($date, '2007:07:27', 'L'); my $son = MakeCode($date, '2010:04:27', 'J'); if (defined $make) { $make =~ tr(/\\?*:|"<>\0)()d; # remove illegal characters $make .= '_'; } else { $make = ''; } my @parts = split /[: ]/, $date; return "${make}$parts[2]$parts[1]$parts[0]$daughter$son"; }, }, }, ); 1; #end