Beefy Boxes and Bandwidth Generously Provided by pair Networks
No such thing as a small change
 
PerlMonks  

Re: using AUTOLOAD to access read-only data structures

by ikegami (Patriarch)
on Jun 02, 2011 at 06:23 UTC ( [id://907755]=note: print w/replies, xml ) Need Help??


in reply to using AUTOLOAD to access read-only data structures

The dangerous aspect can be mitigated by returning an object that stringifies or throws a better error on method call.

Replies are listed 'Best First'.
Re^2: using AUTOLOAD to access read-only data structures
by shmem (Chancellor) on Jun 02, 2011 at 06:27 UTC
    It can't be done from within, since the method call is out of the scope of that package. It's like saying
    perl -le '$foo = "Blorf"; $foo->quux' Can't locate object method "quux" via package "Blorf" (perhaps you for +got to load "Blorf"?) at -e line 1.
      $foo doesn't hold an object that stringifies to Blorf or throws a better error on method call.
        Thanks, got it. Sometimes I'm slow.

        update: something like that would do:

        ... sub import { shift; $config or $config = XMLin(shift) if @_; $XSConf::strict = shift if @_; return; # don't give $config away } .... ref $thing and $token = $thing or return bless \$thing, XS +Conf::Str; } } return $package; } package XSConf::Str; use overload '""' => \&str, fallback => 1; sub str { ${$_[0]} } our $AUTOLOAD; sub AUTOLOAD { return if $AUTOLOAD eq 'XSConf::Str::DESTROY'; my @caller = caller; die "you cannot invoke the method '$AUTOLOAD' on the string '$_[0] +'" . " at $caller[1] line $caller[2]\n" if $XSConf::strict; $_[0]; } 1;

        update: added $XSConf::strict, caller and die

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others imbibing at the Monastery: (4)
As of 2024-03-19 03:44 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found