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


in reply to Re: Closure Over Scalar?
in thread Closure Over Scalar?

This doesn't work as you intended. The bareword FIXED_STRING in a hash access will be used as the string 'FIXED_STRING' , not as an expression that would evaluate the constant. To use the constant, you need to prevent it from being treated as a bareword. $persistent{$x}{+FIXED_STRING} is one possibility.

Replies are listed 'Best First'.
Re^3: Closure Over Scalar?
by QM (Parson) on Feb 19, 2021 at 14:19 UTC
    Yes. The reason I don't like string literals as hash keys, is it's too easy in some contexts to create data on one hash key, look for it with another key, and decide that nothing interesting happened. I'd much prefer the interpreter tell me "no such variable" -- I'd rather have the explicit message, rather than a quiet failure.

    And missing out the + to avoid string interpolation of the bareword is something I'm likely to do.

    In production code, I try never to have string literals, except where they are assigned to variables or constants. And since, in Perl, constants are a bit funny, I use scalars as being less likely to be accidentally overwritten.

    I liked the idea of restricted keys, such as in Hash::Util, though I can still mistype string literals when accessing hashes, so "constant" scalars are still valuable to me.

    -QM
    --
    Quantum Mechanics: The dreams stuff is made of