Beefy Boxes and Bandwidth Generously Provided by pair Networks
Problems? Is your data what you think it is?
 
PerlMonks  

Re^2: Calling an intermediate method

by trizen (Friar)
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 having an uproarious good time at the Monastery: (6)
As of 2014-12-27 10:54 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    Is guessing a good strategy for surviving in the IT business?





    Results (177 votes), past polls