I tried a mix of GD and
GD::Image::AnimatedGif.
I used the sample from
GD, but I kept it very simple. I just wanted the blue border of the red oval to expand and contract when I passed over it with my mouse. It's almost imperceptible, but it works.
#!/usr/bin/perl
use strict;
use warnings;
use GD;
use GD::Image::AnimatedGif;
my $im_width = 100;
my $im_height = 100;
my $im = new GD::Image($im_width, $im_height);
my $white = $im->colorAllocate(255,255,255);
my $black = $im->colorAllocate(0,0,255);
my $red = $im->colorAllocate(255,0,0);
my $blue = $im->colorAllocate(0,0,255);
$im->rectangle(0,0,99,99,$black);
$im->arc(50,50,95,75,0,360,$blue);
$im->fill(50,50,$red);
my $gifdata = $im->gifanimbegin;
my $frame = GD::Image->new($im->getBounds);
$gifdata = $frame->gifanimadd;
my $loop = 0;
my $speed = 82;
$gifdata .= $im->gifanimend;
print "Content-type: image/gif\n\n";
print $im->animated_gif($loop, $speed);