Stuff with the Perl Foundation. A couple of patches in the Perl core. A few CPAN modules. That about sums it up.
So a coworker wanted to know the syntax for getting hash interpolation to work. He had something similar to this:
print "value is $data{'value'}\n";
I assured him that would be fine but he said that he's been bitten by this before, even when using interpolated strings. So just to be sure, I wrote up a simple test. One test line fails. Without running that, can you guess which one and why?
#!/usr/bin/perl
use strict;
use warnings;
use Test::More tests => 6;
my %french_for = (
one => 'un',
);
my $num = 'one';
is "$french_for{one}", 'un', 'bare literal key';
is "$french_for{'one'}", 'un', 'single quoted literal key';
is qq[$french_for{"one"}], 'un', 'double quoted literal key';
is "$french_for{$num}", 'un', 'bare variable key';
is "$french_for{'$num'}", 'un', 'single quoted variable key';
is qq[$french_for{"$num"}], 'un', 'double quoted variable key';
To be fair, I guess the failure isn't too surprising but in reading through perltrap, it doesn't appear to be documented. Is it documented and I just missed it?
Single quoted variable (Score:2)
is "$french_for{'$num'}", 'un', 'single quoted variable key';
Will fail. You've single quoted '$num' hence you're looking for the key "\$num".
Re:Single quoted variable (Score:2)
Yes, that's the failure, but I don't know why that should be obvious because if you add diag "'$num'" to the end of that script, you get this:
In other words, a variable in single quotes will interpolate if it's embedded in a double quoted string but not used as the key to a hash or an index into an array. That seems a bit odd and it would be nice if it were documented better. I should submit a patch for perltrap if it's not documented.
Re:Single quoted variable (Score:2)
Re:Single quoted variable (Score:1)
Actually what seemed odd to me was that the first example (with single quotes around the literal) worked OK. But given that, I did expect it to fail round a variable (as in I guessed what the failure would be before even seeing your list of choices).
Yes directly in a double-quoted string literal single quotes don't prevent a variable be
Re:Single quoted variable (Score:2)
Well, basically the stuff after a $ or @ sigil gets treated sort of like it's code to be executed. This leads to the following:
I know you and I have discussed this bit, but others might want to be aware of it.
Hm. (Score:1)