in reply to Assigning Variables to String Elements

Your @tmp-constructing loop is inside the $runs loop. And @tmp is never reset. So you add 1552 elements to @tmp, then splice the first 26 elements off. On the next run of the outer loop you add another 1552 elements to @tmp and again only splicing 26 elements off. That @tmp will be growing fast and it seems you are using only about 1/60th of it.

The script would work exactly like before, but faster, if you changed this to

for ($i = 0; $i < 26 ; $i++) { # choose a randomly selected string of 4 elements from our arr +ay push (@PAR1, $X_info[int(rand($range))]); } for ...