Beefy Boxes and Bandwidth Generously Provided by pair Networks
Your skill will accomplish
what the force of many cannot
 
PerlMonks  

Give me something $self-ish

by bsb (Priest)
on Feb 21, 2003 at 04:45 UTC ( [id://237345]=CUFP: print w/replies, xml ) Need Help??

I had a little library which supported a number of interfaces: procedural, class-based and object-based. The _shift_self function called as my $self = &_shift_self looks at the caller's @_ and Does-What-I-Mean, possibly shifting the first arg or returning a class name.

A bigger example will follow.

package MyClass; use Scalar::Util qw(blessed); sub _shift_self { if(!defined $_[0]) { return __PACKAGE__; } elsif(blessed $_[0] && $_[0]->isa(__PACKAGE__) ) { return shift; } elsif ( $_[0] =~ /^[_a-zA-Z][\w:']*$/ # Legit package names && $_[0]->isa(__PACKAGE__) ) { # should it be UNIVERSAL::isa($_[0],__PACKAGE); ?? return shift; } else { return __PACKAGE__; } } sub new { my $self = &_shift_self; my $class = ref $self || $self; return bless [1], $class; } sub dump_self { my $self = &_shift_self; print '$self is <',Dumper($self), '> '; $self->do_something(@_); }

Replies are listed 'Best First'.
Re: Give me something $self-ish
by bsb (Priest) on Feb 21, 2003 at 04:51 UTC
    A bigger demo although it doesn't really show the usefulness.
    For me the usefulness was in easily providing multiple interfaces to the same C library.

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others about the Monastery: (5)
As of 2024-04-19 16:41 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found