Absolut Newbie wrote:
I have a program that generates a random number between 1 and 6. based on
the outcome I want to run a subroutine that corresponds to the result.
i.e if the result is 1 then the program should run sub F1. my question is
how can I dynamically call the subroutine.
i tried this but obviously it didn't work
use strict;
use warnings;
# always do those :)
$var1 = int(rand(6)) + 1 ; # i didn't want zero as an answer
my $var1 = ...
$var1 ='F'.$var1; # sub names can't start w/ numbers
Why not
my $var1 = 'F' . int(rand(6)) + 1;
??
$var1(); # this is where it crashes
see `perldoc perlref` for reference info
This is a soft ref and you're not doing it right....
try
$var1->();
or
{$var1}->();
Or better yet, do it with hard references:
#!/usr/bin/perl
use strict;
use warnings;
my %funcs = (
1 => \&foo,
2 => \&bar,
3 => \&baz,
4 => \&bot,
5 => \&wam,
6 => \&pow
);
$funcs{ int(rand(6)) + 1 }->();
sub foo { print "Foo\n"; }
sub bar { print "Bar\n"; }
sub baz { print "Baz\n"; }
sub bot { print "Bot\n"; }
sub wam { print "Wam\n"; }
sub pow { print "Pow\n"; }
HTH :)
Lee.M - JupiterHost.Net
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>