die "usage: <speed> <z-paranoid off>" unless (@ARGV == 1 or 2);
won't die if you have more than 1 param (as in 3, 4 or even 55555), since you need unless (@ARGV == 1 || @ARGV == 2).
2 is always true (in Perl5 anyway :) ), so you're basically saying if @ARGV has 1 element or 2 is true.
I also can recommend \a for the beep and dropping the my $unused = in my $unused = <STDIN>;.
and before I forget... pleeeaaase get the status code from system().
Greetz
Beatnik
... Quidquid perl dictum sit, altum viditur.