With the first incantation, obviously $pocus to rounded to 2 and the array is cut down to only 0..2 elements. The other two, I'm not sure what's happening.
#!/usr/bin/perl -w
use strict;
my(@hocus,$pocus);
@hocus=qw(rabbit_0 rabbit_1 rabbit_2 rabbit_3);
$pocus= 1.9999999999999999;
&saymagicword;
&prestochango;
$pocus= 1.9999999999999998;
&saymagicword;
&prestochango;
$pocus= 0.9999999999999999;
&saymagicword;
&prestochango;
sub saymagicword{$#hocus=$pocus};
sub prestochango{print("@hocus");print(" (0-$pocus)\n");};