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

Re^2: Calling an intermediate method

by trizen (Hermit)
on Dec 19, 2013 at 00:20 UTC ( #1067747=note: print w/ replies, xml ) Need Help??


in reply to Re: Calling an intermediate method
in thread Calling an intermediate method

Thank you very much. Class::Method::Modifiers does exactly what I want, but the bad thing is that you must know all the method names. I worked around this issue by using the special hash %PackageName::, but I really don't like this ugly fix. I looked briefly in the documentation of overload, but there doesn't seem to be any way to overload the method caller. Maybe, will come some day...

use 5.014; package Foo { sub new { bless [] } use Class::Method::Modifiers qw(before); foreach my $method (keys %Foo::) { next if $method =~ /^(_|(?:BEGIN|new|before)\z)/; before $method => sub { my ($self) = @_; print "** Preparing...\n"; push @{$self}, 'money'; print "** Ready to continue...\n"; }; } sub Berlin { my $self = shift; print "> I'm in Berlin!\n"; } sub Paris { my $self = shift; print "> I'm in Paris!\n"; } }; my $obj = Foo->new; $obj->Berlin(); say "# Self contains: @{$obj}";


Comment on Re^2: Calling an intermediate method
Download Code
Re^3: Calling an intermediate method
by tobyink (Abbot) on Dec 19, 2013 at 10:59 UTC

    Sub attributes provide a fairly nice alternative...

    use 5.014; package Foo { sub new { bless [] } use Attribute::Handlers; use Class::Method::Modifiers qw(before); sub City :ATTR { my $method = substr *{$_[1]}, 1; before $method => sub { my ($self) = @_; print "** Preparing...\n"; push @{$self}, 'money'; print "** Ready to continue...\n"; }; } sub Berlin :City { my $self = shift; print "> I'm in Berlin!\n"; } sub Paris :City { my $self = shift; print "> I'm in Paris!\n"; } }; my $obj = Foo->new; $obj->Berlin(); say "# Self contains: @{$obj}";
    use Moops; class Cow :rw { has name => (default => 'Ermintrude') }; say Cow->new->name

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others meditating upon the Monastery: (10)
As of 2015-07-06 19:49 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (81 votes), past polls