Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl-Sensitive Sunglasses
 
PerlMonks  

Re^2: SVN::Client subclassing issue

by Anonymous Monk
on Sep 27, 2011 at 19:42 UTC ( #928160=note: print w/ replies, xml ) Need Help??


in reply to Re: SVN::Client subclassing issue
in thread SVN::Client subclassing issue

Guess I look for another way unless I want to modify Client.pm...which I don't :)

Make your class has-a-SVN::Client not is-a-SVN::Client?

It seems to me that portion of SVN::Client is broken, in that it needs to use

UNIVERSAL::isa($_[$index], 'SVN::Client')
instead of ref/eq

Apparently you can report bugs at http://subversion.apache.org/issue-tracker.html


Comment on Re^2: SVN::Client subclassing issue
Download Code
Re^3: SVN::Client subclassing issue
by tj_thompson (Scribe) on Sep 27, 2011 at 19:54 UTC
    Make your class has-a-SVN::Client not is-a-SVN::Client?

    This is what I had in mind. I was going to subclass initially because I wanted some functions to 'fall through' to the SVN::Client class without having to wrap each one. This should be easy enough to do from another object, but it's not something I've done before.

    So assuming my new Foo class is called with a function that is not part of the package, let's say Foo->cat. Foo does not have a cat function, but Foo does have a SVN::Client object. I'd like to pass a call to a function that does not exist in the current package to be handled by the SVN::Client object. What is the proper/elegant way to do this?

      our $AUTOLOAD; sub AUTOLOAD { my( $self )= shift @_; my( $class, $method )= $AUTOLOAD =~ /^(.+)(?:'|::)(.+)$/ or die "Invalid method name: $AUTOLOAD"; return if 'DESTROY' eq $method; die "Can't call internal method, $method, via ", __PACKAGE__, $/ if $method =~ /^_/; return $self->{whatever}->$method( @_ ); }

      Not so much "proper" or "elegant" but a thrown-together example but also not "improper" nor particularly "inelegant".

      - tye        

      See AUTOLOAD section of Modern Perl: the free book, and mind the caveats

      Assuming hashref has-a 'SVN::Client'

      sub AUTOLOAD { my ($name) = our $AUTOLOAD =~ /::(\w+)$/; my $method = sub { my $self = shift; return $self->{'SVN::Client'}->$name( @_ ); } no strict 'refs'; *{ $AUTOLOAD } = $method; return $method->( @_ ); }

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others rifling through the Monastery: (5)
As of 2014-07-13 18:12 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    When choosing user names for websites, I prefer to use:








    Results (251 votes), past polls