Beefy Boxes and Bandwidth Generously Provided by pair Networks
Problems? Is your data what you think it is?
 
PerlMonks  

Re^4: Inline substitution regex

by vitoco (Friar)
on Sep 29, 2009 at 13:26 UTC ( #798117=note: print w/ replies, xml ) Need Help??


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

Just guessing, shouldn't the solution be:

foreach (keys %{$ref_cookie}) { push @{$self->{cookies}}, /^-(.*)/, $ref_cookie->{$1}); }

?

Or the curly brackets from the failing original code isolate $_ and the substitution does not affect the last parameter of push?

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


Comment on Re^4: Inline substitution regex
Select or Download Code
Replies are listed 'Best First'.
Re^5: Inline substitution regex
by ikegami (Pope) on Sep 29, 2009 at 16:31 UTC

    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.

      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.

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://798117]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others lurking in the Monastery: (5)
As of 2015-07-28 02:59 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (251 votes), past polls