##
## _fd()
##
## Arguments:
## ARGUMENTS: arrayref -- The arguments to a subroutine
## DEFAULTS: arrayref -- The defaults for those arguments
##
## Returns:
## list -- The elements of ARGUMENTS. Any elements in ARGUMENTS are replaced
## by the corresponding element in DEFAULTS.
##
sub _fd {
my ($args, $defaults) = @_;
my @filled = ();
foreach (0 .. max($#$args, $#$defaults)) {
push @filled, ( defined( $args->[$_] ) ? $args->[$_] : $defaults->[$_] );
}
return @filled;
}
sub max {
($_[0] > $_[1]) ? $_[0] : $_[1];
}
####
##
## test_default()
##
## Arguments:
## $name: string -- Somebody's name. (Optional)
##
## Prints "Hello my name is $name". Name defaults to "ben".
##
sub test_default {
my ($name) = _fd(\@_, ["ben"]);
print "Hello my name is $name\n";
}
##
##
use base 'Attribute::Default';
sub test_default : default('ben') {
my ($name) = @_;
print "Hello my name is $name\n";
}