==
используется для сравнения чисел. Используйте eq
для сравнения строк:
if ($tmpvar eq $regex_array[$i])
Кроме того, вы выходите за пределы regex_array
в цикле for:
for ($i=0; $i < $tmparraylength ;$i++)
^ this must not be <=
Наконец, вы делаете слишком много работы. Используйте хеш, он автоматически «удаляет дубликаты ключей».
my %temp_hash;
while (scalar(keys %temp_hash) < number_of_things_you_want) {
$temp_hash{$pass->randregex($regex_from_file)}++;
}
@regex_array = keys %temp_hash;