Beefy Boxes and Bandwidth Generously Provided by pair Networks
Think about Loose Coupling
 
PerlMonks  

Re^2: Creating dynamic parent/child relationships

by nysus (Vicar)
on Sep 03, 2019 at 17:34 UTC ( #11105522=note: print w/replies, xml ) Need Help??


in reply to Re: Creating dynamic parent/child relationships
in thread Creating dynamic parent/child relationships

OK, I think I see what you are saying. So essentially, my Base class does the following when the "do" method is called on it:

package Base; use One; use Two; use Three; sub do { print "hi from Base\n"; Three::do; Two::do; One::do; }

And my config file would determine which order to run the subroutines from each of the packages. Is that right?

UPDATE: Here is a version of the code above that is a bit more dynamic:

package Base ; use One; use Two; use Three; sub new { my $class = shift; bless { steps => [ qw(Three Two One) ] }, $class; } sub do { my $s = shift; print "hi from Base\n"; for my $step ( @{ $s->{steps} } ) { $step->do; } }

So I think I got it from here. I just have to dynamically import the correct modules and populate the steps attribute with the config file during construction. Nice trick. Thanks!

$PM = "Perl Monk's";
$MCF = "Most Clueless Friar Abbot Bishop Pontiff Deacon Curate Priest Vicar";
$nysus = $PM . ' ' . $MCF;
Click here if you love Perl Monks

Replies are listed 'Best First'.
Re^3: Creating dynamic parent/child relationships
by nysus (Vicar) on Sep 03, 2019 at 18:35 UTC

    Just a quick follow up to show a crude way of getting this done by passing the order of the classes into the base class:

    package Base ; sub new { my $class = shift; for my $mod (@_) { eval "require $mod"; } bless { steps => \@_ }, $class; } sub do { my $s = shift; print "hi from Base\n"; for my $step ( @{ $s->{steps} } ) { $step->do; } }

    Then call construct new from a script:

    my $base = Base->new( qw ( One Three Two ) ); $base->do;

    $PM = "Perl Monk's";
    $MCF = "Most Clueless Friar Abbot Bishop Pontiff Deacon Curate Priest Vicar";
    $nysus = $PM . ' ' . $MCF;
    Click here if you love Perl Monks

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others about the Monastery: (4)
As of 2020-11-28 17:29 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found

    Notices?