What if one of these conditions fails:

` my ($ts,$cat) = $vals[0] =~ /TS(\d+)(.+)$/;
...
for(0..$#cats) { if ($cats[$_] =~ /$cat/) { $j = $_ } }
for(@{$groups[0]}) { if ($ts == $_) { $i = 0 } }
for(@{$groups[1]}) { if ($ts == $_) { $i = 1 } }
for(@{$groups[2]}) { if ($ts == $_) { $i = 2 } }
`

It looks like somehow, somewhere, either

`$i` or

`$j` is left undefined. Add some

print statements in your loops that print out the values of your various variables and check that your assumptions are valid here. Could there be an empty line in your input?

Comment onRe: Use of uninitialized value in array elementSelectorDownloadCode