in reply to Re^3: anonymous scalar reference
in thread anonymous scalar reference

I think that saying “the extra scope is almost always overkill” is a little disingenuous—your second example only works1 because of the extra scope. Specifically, if you tried to unroll this for loop, then you'd have to either think up a bunch of extra names, or get warned.

1 By which I mean, only works silently under warnings.
UPDATE: Despite typing it out myself, I didn't register the ‘almost always’, and so was reacting as if the statement was unqualified. I'm sorry about that.

Replies are listed 'Best First'.
Re^5: anonymous scalar reference
by ikegami (Patriarch) on Nov 26, 2008 at 17:45 UTC

    your second example only works1 because of the second scope

    What do you call the second example? The way I see it, I only posted one.

    Specifically, if you tried to unroll this for loop, then you'd have to either think up a bunch of extra names, or get warned.

    But why would you do that. I can't imagine any scenario where you'd do that. Can you come up with a real world example where you need to generate more than one such reference in the same scope? If there was such an case, it seems to me that having different names for different variables would be a good thing.

      What do you call the second example? The way I see it, I only posted one.
      Sorry, my wording was pretty bad. I was referring to your examples of a single reference to an ‘anonymous’ scalar and of ten references to ‘anonymous’ scalars. The first one genuinely has no extra scope, whereas the second one has the for introduce the extra scope.

      But why would you do that. I can't imagine any scenario where you'd do that. Can you come up with a real world example where you need to generate more than one such reference in the same scope?
      The only common use of anonymous scalars that I know is as blessees when the contents don't matter. I've occasionally used this to produce ‘poor man's mixins’:
      bless [ bless \do { my $anon } => A, bless \do { my $anon } => B ] => +C;
      Now package C can delegate calls to methods that should be handled by package A or B. I'm not sure if that's a good usage, though.

      If there was such an case, it seems to me that having different names for different variables would be a good thing.
      I agree that different names for the references is good, but avoiding introducing an extra scope requires different names for the referents. That is, I'd have to write something like
      bless [ bless \my $anon_in_A => A, bless \my $anon_in_B => B ] => C
      instead.

        I've occasionally used this to produce ‘poor man's mixins’:

        "occasionally" sounds like the opposite of "almost always" to me, so what part of what I said did you have a problem with?

        Anyway, the point is that do has nothing to do with it. If people need an extra scope, they know how to make one. It seems weird to move the \ outside, though.