Beefy Boxes and Bandwidth Generously Provided by pair Networks
"be consistent"
 
PerlMonks  

Re: what's a proper way to code method synonyms

by Fletch (Chancellor)
on Sep 06, 2006 at 14:03 UTC ( #571463=note: print w/replies, xml ) Need Help??


in reply to what's a proper way to code method synonyms

sub real_method { ... } sub real_sub { ... } { no strict 'refs'; *{$_} = \&real_method for ( qw( foo bar baz blort +) ) } { no strict 'refs'; *{$_} = \&real_sub for ( qw( quux pony ) ) }

Replies are listed 'Best First'.
Re^2: what's a proper way to code method synonyms
by ChemBoy (Priest) on Sep 06, 2006 at 22:29 UTC

    Though I share merlyn's reservations about the idea in general, I think it's worth pointing out that the OP's aliasing method doesn't break inheritance, but this one does: if a subclass overrides the main spelling of the method, the alternate spellings should also be directed to the overridden method, rather than bypassing it. As an alternative approach that combines something approaching safety with reasonable typing economy, I'd try something like this:

    _make_aliases('real_method',qw(foo bar baz blort)); sub _make_aliases { no strict 'refs'; my ($main_spelling,@alternates) = @_; foreach my $new_method (@alternates) { *{$new_method} = sub { my $self = shift; $self->$main_spelling +(@_) } } }

    This approach should (I haven't tested) let subclasses safely ignore the aliasing entirely, and just override the main method—though any diagnostic messages may still be a bit confusing. And it still provides the economy of keystrokes that the OP was looking for.



    If God had meant us to fly, he would *never* have given us the railroads.
        --Michael Flanders

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others browsing the Monastery: (7)
As of 2020-07-09 12:36 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found

    Notices?