On Tue, Nov 04, 2003 at 11:18:36AM +0100, A. Pagaltzis wrote:
> * [EMAIL PROTECTED] <[EMAIL PROTECTED]> [2003-11-04 10:49]:
> > What else do you mean by "tightly scoped"?
> 
> Something like this:
> 
> * Orton, Yves <[EMAIL PROTECTED]> [2003-11-03 17:34]:
> >   use Scalar::Util qw(refaddr);
> > 
> >   {  
> >    my %attrib;
> >    sub inside_out {
> >     my $s=shift;
> >       if (@_) {
> >           $attrib{refaddr($s)}=shift;
> >           return $s;
> >       } else {
> >           return $attrib{refaddr($s)};
> >       }
> >    }
> >   }

I'm guessing you didn't read my code because it was based on Yves'. Yves
showed a single accessor method called inside_out, you complained that it
would requir lots of typing of refaddr to use that for every attribute in
the class so I gave an out-of-band accessor method _maker_.

The idea being you could just do

use My::OutOfBandLexicalThing qw( Attr Attr2 Attr3 );

and you'd get lexically scoped, overload worry free, out of band attrs
without any bothersome typing.

> I guess you can reduce the accessibility of the attribute by
> storing the closure ref in a lexical scoped like %attrib in the
> above code instead of exporting it to a named sub.

Since the exported closure was the only thing that let you access %attrib,
putting it inside %attrib rather than exporting it would definitely reduce
the accessibility of the attribute :-)

F

Reply via email to