Beefy Boxes and Bandwidth Generously Provided by pair Networks
Clear questions and runnable code
get the best and fastest answer
 
PerlMonks  

Re: Modules: Building blocks for the Daft Adventure

by Masem (Monsignor)
on Jun 12, 2001 at 15:41 UTC ( #87774=note: print w/replies, xml ) Need Help??


in reply to Modules: Building blocks for the Daft Adventure

Right idea: you probably are meaning to use coderefs.

The way I've been using coderefs is as follows:

sub do_stat { my ( $dice, $mod ) = @_; my $roll = RPG::Dice::roll ( $dice ); return &$mod( $roll ); }
That is, the &$mod is a function call of a deref'ed coderef. To actually call this, you can do it by one of two ways:
# anonymous function call my $roll = do_stat( "3d6", sub { int($_[0]/2)-5; } ); # Named function call sub modify { int($_[0]/2)-5; } my $roll2 = do_stat( "3d6, \&modify );
(The \& here creates a reference to the function modify).

What's nice about coderefs is that they then can be used as variables, and allow you to quickly do different functions depending on what you pass:

my @data = ( { name => 'STR', dice => '3d6', modifier => sub { $_[0] + 2 } }, { name => 'INT', dice => '3d6', modifier => sub { $_[0] - 5 } } ); foreach ( @data ) { $_->{ roll } = &{ $_->{ modifier } }( RPG::Dice::roll( $_->{ dice } ) ); }
</CODE>
Dr. Michael K. Neylon - mneylon-pm@masemware.com || "You've left the lens cap of your mind on again, Pinky" - The Brain

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others contemplating the Monastery: (5)
As of 2022-05-26 14:47 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    Do you prefer to work remotely?



    Results (93 votes). Check out past polls.

    Notices?