They dereference the array copying it to a new variable. This gives easier syntax, but the array is copied which might have performance implications. (They are very slight since the array is only a single element in this case.) Mine should have perhaps been named $strarray_aref since it was still a reference.

All the variables I was using were references, hence a scalar $variable which get dereferenced with @{ } or %{ } or ->

One thing I forgot to mention that the outermost loop in my code sample is pretty useless since the array is only a single element. It could be replaced with my $str = $strarray->[0];