coreolyn has asked for the wisdom of the Perl Monks concerning the following question:
I can tell by looking at this sub that this it does not look like the type of elegant solutions I've seen on this site. What I'm trying to accomplish here is the following:
Call an object as Dice->grab('3d6s') Where the number before 'd' is one argument, the number after 'd' is and argument and the 's' is an optional argument. I've gotten it to work, but I can tell by looking at it that there is probably a more efficient way to accomplish it.
sub grab { my $init = shift; my $class = ref($init) || $init; if ( shift =~ m/(^\d+)d(\d+)(.*)/i ) { my ( $type, $face, $qty, @dice ); $qty = $1; $type = $2; $face = $3; for ( my $i=1; $i <= $qty; $i++ ) { if ( $face =~ m/s$/i ) { push( @dice, Die->get($type,1) ); } else { push( @dice, Die->get($type) ); } } return bless { dice => \@dice }, $class; } else { croak "Invalid parameters to Dice::Dice->grab: $!"; } }
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: BWTDI: Better Way To Do It?
by I0 (Priest) on Jan 14, 2001 at 22:34 UTC | |
by coreolyn (Parson) on Jan 15, 2001 at 00:34 UTC | |
by merlyn (Sage) on Jan 15, 2001 at 00:40 UTC | |
by I0 (Priest) on Jan 15, 2001 at 01:23 UTC | |
by coreolyn (Parson) on Jan 14, 2001 at 22:52 UTC | |
by chipmunk (Parson) on Jan 15, 2001 at 09:13 UTC | |
|
Re: BWTDI: Better Way To Do It?
by Kanji (Parson) on Jan 14, 2001 at 22:12 UTC | |
by coreolyn (Parson) on Jan 14, 2001 at 22:45 UTC | |
|
Re: BWTDI: Better Way To Do It?
by mirod (Canon) on Jan 14, 2001 at 21:17 UTC | |
|
Re: BWTDI: Better Way To Do It?
by dkubb (Deacon) on Jan 15, 2001 at 12:48 UTC | |
by coreolyn (Parson) on Jan 15, 2001 at 21:12 UTC | |
|
Re: BWTDI: Better Way To Do It?
by I0 (Priest) on Jan 14, 2001 at 21:39 UTC | |
by sutch (Curate) on Jan 14, 2001 at 21:41 UTC |