$a>0 and $a<=1;
常に判定式が真になるという条件付きで$aに乱数をセットしたいです。
my $a = rand 1;
これでは0が入る可能性がありますのでアウトということです。

unless($a>0 and $a<=1){ $a+0.000001 }
などのように乱数の公平性を崩しかねない方法は避けたいです。

unless($a>0 and $a<=1){ $a = rand 1 }
これをループ処理でやっても多分公平性を損ないますよね。

(最低でも小数点第9位までと考えていますが、多くても困らないので*1億→int→/1億などはしていません。)

賢い方どうぞよろしくおねがいします。