Apocalypse 12 has the following to say about roles and trust
(http://www.perl.com/pub/a/2004/04/16/a12.html?page=10)

  It's not clear whether roles should be allowed to grant
  trust. In the absence of evidence to the contrary, I'm 
  inclined to say not.

In Perl 5, I recently found myself in the annoying position of having a
method which could accept scalar, array, or hash references.  My
primary code looked similar to this (simplified for clarity):

  sub _attributes {
    my ($self, $attrs) = @_;
    return $$attrs if UNIVERSAL::isa( $attrs, 'SCALAR' );

    my @attributes = UNIVERSAL::isa( $attrs, 'HASH' ) 
      ? %$attrs : @$attrs;
    return unless @attributes;
    # more code here
  }

This was a private method, but $attrs is an argument that is passed in
by the person using my class.  It would be nice if I could just assign
an "attributes" role to the SCALAR, ARRAY, and HASH classes and say
that only my class could see the method(s) it provides.  Thus, my
caller would be blissfully unaware that I am doing this:

  $attrs->attributes; # even if it's an array reference

This would get rid of all of the bad UNIVERSAL::isa type of code and
allow Perl to handle the dispatching instead of the programmer.  While
most probably don't do stuff like this, I think it's a great example of
why role should be allowed to specify trust.  I've been using
"role-like" behavior quite a bit in a large test suite I'm working on
and it would be nice to be able to do stuff like this.

Cheers,
Ovid

-- 
If this message is a response to a question on a mailing list, please send
follow up questions to the list.

Web Programming with Perl -- http://users.easystreet.com/ovid/cgi_course/

Reply via email to