in reply to Another "Can't use string as an ARRAY ref"

OK, so you first assign a name, so probably a string to $plants->[$i]{common} :
$plants->[$i]{'common'} = $plants->[$i]{'common_name'};

And few lines later, you try to store something in a hash ref:

$plants->[$i]{'common'}->[$jctr]{'sizes'} = $sizes->[$j]{'plantsiz +e'}.$sizes->[$j]{'unit'}; # ~~~~~~~~~~~~~~~~~~~~~~~

The underlined thing is a string (comment mine). You can't use a string as a hash ref under strict.

BTW, is $jctr ever different to $j (and $kctr to $k )? If not, you can improve readability by dropping two variables.

($q=q:Sq=~/;[c](.)(.)/;chr(-||-|5+lengthSq)`"S|oS2"`map{chr |+ord }map{substrSq`S_+|`|}3E|-|`7**2-3:)=~y+S|`+$1,++print+eval$q,q,a,