sub fib {
croak("…") if @_ != 1;
my $nth = $_[0];
croak("…") if not defined $nth;
croak("…") if $nth !~ /^+?\d+$/a;
return $nth if $nth <= 1;
return fib( $nth - 1 ) + fib( $nth - 2 );
}
####
my $fib_die_msg = 'fib() takes one positive integer as argument, aborted';
sub fib {
my($nth = shift) =~ m{^\d+$} or die $fib_die_msg;
@_ and die $fib_die_msg;
return $nth if $nth <= 1;
return fib( $nth - 1 ) + fib( $nth - 2 );
}
##
##
sub fib {
my($nth = shift) =~ m{^\d+$} and ! @_ or die $fib_die_msg;
...
}
##
##
sub fib {
my $nth = shift;
(caller)[3] eq 'fib' or $nth !~ m{^\d+$} or @_ and die $fib_die_msg;
return $nth if $nth <= 1;
return fib( $nth - 1 ) + fib( $nth - 2 );
}