http://qs1969.pair.com?node_id=628812


in reply to Re^2: Hash Syntax Question
in thread Hash Syntax Question

And, if there's nothing in the string to interpolate, perl changes the double quotes to single quotes:

zippy:~/scripts$ deparse -e '$h{q[one]} = 1; $h{qq[two]} = 2; $x = q[t +hr]; $h{qq[${x}ee]} = 3;' $h{'one'} = 1; $h{'two'} = 2; $x = 'thr'; $h{"${x}ee"} = 3; -e syntax OK

Replies are listed 'Best First'.
Re^4: Hash Syntax Question
by Joost (Canon) on Jul 25, 2007 at 21:48 UTC
    Well, deparse isn't 100% reliable, and secondly, it still takes some analyzing to determine that there are no strings to be interpolated in the double-quoted string.

    Probably not much more than analyzing a single-quoted string for \' escapes though, since you'd only have to test for the sigils.

    update: what I mean to say is, all this stuff is done at compile-time - i.e. normally, it's done only once per string; when the code is loaded. It has no impact at all after that. Run-time perl has no distinction between single and double quoted strings - it all compiles to a fixed string (for constant strings) or a number of concatenation operations on variables and constant strings (for interpolations).