in reply to Re^4: Inline substitution regex
in thread Inline substitution regex

Your solution is definitely buggy.

Let's say %$ref_cookie contains

-foo => 'food', -bar => 'bard'

The solution you propose would push

'foo', undef, 'bar', undef -or- 'bar', undef, 'foo', undef (depending on the order the keys are returned)

That's obviously not what he wants. He would just use undef if so.

Fine, you'll say %$ref_cookie should contain

-foo => 'food', foo => 'fool', -bar => 'bard', bar => 'barl'

The solution you propose would push

'foo', 'fool', 'fool', 'bar', 'barl', 'barl' -or- 'foo', 'fool', 'fool', 'fool', 'bar', 'barl' -or- undef, undef, 'bar', 'barl', 'foo', 'fool' -or- ... (depending on the order the keys are returned)

It makes no sense. I suspect the OP wants

'foo', 'food', 'bar', 'bard' -or- 'bar', 'bard', 'foo', 'food' (depending on the order the keys are returned)

That is achieved using the solution I proposed.

Replies are listed 'Best First'.
Re^6: Inline substitution regex
by vitoco (Hermit) on Sep 29, 2009 at 18:20 UTC

    Wow, that was an unexpected answer... :-)

    With post "I should've known better!" in mind, I was trying to understand if $_ is modified only in the scope of the substitution from the OP's attempt:

    foreach (keys %{$ref_cookie}) { push(@{$self->{cookies}}, {$_=~s/^-//}, $ref_cookie->{$_}}); }

    I didn't pay much attention on the context or what keys should be. I see your point and agree.

    Now, if OP has both types of keys, with and without leading hashes:

    -foo => 'food', bar => 'barl'

    the code should be:

    push @{$self->{cookies}}, /^-?(.*)/, $ref_cookie->{$_};

    to get all four values in the array.

    BTW, I'll have to practice more with push of undef in arrays...

      I had only answered your first question. As for your second question, no, the hash creation operator ({}) does not localize $_. Curlies don't localize $_ when they're used as a bare block either. And neither does do. $_ is only implicitly localized by foreach loops (when no iterator variable is provided), map and grep.