in reply to
Dereference string in foreach
See Foreach Loops. If the variable is not declared with my, it is implicitly localized. For each iteration, the variable is aliased to the value you are looping over. Therefore, in the first case, the loop variable $string is a different one than the $string defined before the loop: Try
$sref = \$string;
foreach $string ( @array_of_strings ) {
print $sref, \$string, "\n";
}
In the second snippet, you are using $string1 which is not localized. Therefore, $ref really points to it, and since you assign the value from the loop variable to it, you can acces the value by the reference. Note, though, that this is only a copy of the original value, which means you cannot change the original @array_of_strings by changing $$ref or $string1, but only $string2.