in reply to Re^2: Remove redundency from an array
in thread Remove redundency from an array

jdporter: Of course, that clobbers $_. Perhaps you want to insert local *_; ...

Would this (*_) be relevant here?

$_ *might* be localized, but *_ imho not.

consider:
sub uinq { # local *_; # <== will fail, $_ will work @_ = do { @$_{@_}=(); keys %$_ }; @_ } my @array = (1,1,3,3,2,3,5,7,5,2); print "@{[ uinq @array ]}\n";


Regards & thanks
mwa

Replies are listed 'Best First'.
Re^4: Remove redundency from an array
by ikegami (Patriarch) on Sep 24, 2007 at 19:34 UTC

    First, local *_ does work if you put it in the do block like jdporter said.

    Secondly, local $_ won't work. It'll compile, but that doesn't count for anything if it doesn't do what needs to be done. We want to protect the parent's %_.

      ikegami: 
      - local *_ does work if you put it in the do block like jdporter said
      - ... want to protect the parent's %_

      * Did you test this with the sub{}-example I provided in
         order to show context dependency?
      * where would preservation of %_ (jdporter mentioned $_)
         usually be of some importance?

      Regards & thanks
      mwa

        Did you test this with the sub{}-example I provided in order to show context dependency?

        Nope. I know it does exactly what you said it does. What it doesn't do is show what jdporter's solution has a problem. That would surely involve using jdporter's solution.

        where would preservation of %_ (jdporter mentioned $_) usually be of some importance?

        jdporter mentioned *_, not $_.

        And localizing %_ would be "of some importance" when %_ is changed, like in the parent of the post to which jdporter replied. The same applies to all global variables.

Re^4: Remove redundency from an array
by jdporter (Paladin) on Sep 24, 2007 at 20:05 UTC

    Good point. It's up to you (the programmer) to protect/preserve the contents of @_ if necessary. It wasn't necessary in the code you gave.

    ikegami may be too modest to point out his previous discursion on the subject.