my $x = int(rand 2211); if ($x % 2 == 0) { print_is_even($x); } else { print_is_odd($x); } sub print_is_even { my $n = shift; print qq{$n is even\n}; } sub print_is_odd { my $n = shift; print qq{$n is odd\n}; }However, it can also be done using a reference to a subroutine:
my $x = int(rand 2211); my $subref = ($x % 2 == 0) ? \&print_is_even : \&print_is_odd; $subref->($x); sub print_is_even { my $n = shift; print qq{$n is even\n}; } sub print_is_odd { my $n = shift; print qq{$n is odd\n}; }Note the use of the & symbol in constructing the subroutine reference - this is needed so that Perl interprets the name that follows as a subroutine, and not an ordinary string.
References to subroutines can be treated just like references to other types of variables - for example, they can be passed into subroutines as arguments, and they can be used as values for a hash in a complex data structure. With all of these types of references floating around, sometimes it would be useful to find out just what kind of reference a given variable is; for this, you can use the ref($variable) function, which will return SCALAR, ARRAY, HASH, or CODE for, respectively, a reference to a scalar, array, hash, or subroutine.