It doesn't involve a regex, which would seem inappropriate for this problem, but either of the following two approaches should work:
>perl -wMstrict -le
"my @raw_files = qw{ 12.png 06.png 06.png 03.png 07.png 07.png };
my $blank_png = 'blank.png';
my @blanked_files = interleave_blanks($blank_png, @raw_files);
print qq{@blanked_files};
sub interleave_blanks {
my $blank_file = shift;
my $prev_file = '';
map {
my $repeat = $_ eq $prev_file;
$prev_file = $_;
$repeat ? ($blank_file, $_) : ($_);
}
@_
;
}
"
12.png 06.png blank.png 06.png 03.png 07.png blank.png 07.png
>perl -wMstrict -le
"my @raw_files = qw{ 12.png 06.png 06.png 03.png 07.png 07.png };
my $blank_png = 'blank.png';
my @blanked_files = do {
my $prev_file = '';
map {
my $repeat = $_ eq $prev_file;
$prev_file = $_;
$repeat ? ($blank_png, $_) : ($_);
}
@raw_files
;
};
print qq{@blanked_files};
"
12.png 06.png blank.png 06.png 03.png 07.png blank.png 07.png
Update:
In case the animation sequence is a continuous loop and thus requires a blank .png inserted after the last .png in the array if the last .png is the same as the first .png, this should do the trick (although it might be a little more elegant without a bunch of reverses scattered all over the place):
>perl -wMstrict -le
"my $blank_png = 'blank.png';
print qq{\noutput:};
for (@ARGV) {
print qq{ in: $_};
my @raw_files = split;
my @blanked_files = interleave_blanks($blank_png, @raw_files);
print qq{out: @blanked_files};
}
sub interleave_blanks {
my $blank_file = shift;
my $prev_file = $_[0];
reverse map {
my $repeat = $_ eq $prev_file;
$prev_file = $_;
$repeat ? ($blank_file, $_) : ($_);
}
reverse @_
;
}
"
"12.png 06.png 06.png 03.png 07.png 07.png"
"07.png 12.png 06.png 06.png 03.png 07.png 07.png"
output:
in: 12.png 06.png 06.png 03.png 07.png 07.png
out: 12.png 06.png blank.png 06.png 03.png 07.png blank.png 07.png
in: 07.png 12.png 06.png 06.png 03.png 07.png 07.png
out: 07.png 12.png 06.png blank.png 06.png 03.png 07.png blank.png 07.
+png blank.png
|