perlquestion
coreolyn
<p>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:</P>
<p>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.</p>
<code>
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: $!";
}
}
</code>
<p><a href="/index.pl?node=coreolyn&lastnode_id=479">coreolyn</a></p>