GetOptions(
'f' => \my $filename,
'bar' => \my $bar,
'bruce' => \my $batman,
'u' => \my $universe,
);
foo(
file => $filename,
maybe bar => $bar,
maybe baz => $batman,
maybe universe => $universe,
)
####
sub foo( %options ) {
if( ! exists $options{ baz } ) {
$options{ baz } = 'Superman';
};
...
}
##
##
sub foo( :$baz = 'Superman', :$bar, :$file, :$universe='DC' ) {
}
##
##
sub foo( %options ) {
...
}
##
##
sub option ( $key, $def, $options ) {
if( !exists $options->{ $key } ) {
$options->{ $key } = $def;
}
return $options
}
##
##
sub foo( %options ) {
option baz => 'Superman',
option universe => 'DC',
\%options;
return \%options
}
##
##
option files => [glob('~/*')],
option html => $user_agent->get('https://example.com'),
##
##
use 5.020;
use feature 'signatures';
no warnings 'experimental::signatures';
use Carp 'croak';
sub option ( $key, $def, $options ) {
if( !exists $options->{ $key } ) {
$options->{ $key } = $def;
}
return $options
}
sub required ( $key, $options ) {
if( !exists $options->{ $key } ) {
croak sprintf 'Need the "%s" option passed in', $key;
}
return $options
}
sub foo( %options ) {
option baz => 'Superman',
option universe => 'DC',
\%options;
return \%options
}
sub req( %options ) {
required 'run',
option baz => 'Superman',
\%options;
return \%options
}
use Test2::V0 '-no_srand';
is option('baz' => 'default', {}), { baz => 'default' }, 'Setting a default';
is foo(), { baz => 'Superman', universe => 'DC' }, 'Default values';
is foo(baz => 0), { baz => '0', universe => 'DC' }, 'False value';
is foo(baz => undef), { baz => undef, universe => 'DC' }, 'Undef but present value is kept';
is foo(baz => undef), { baz => undef, universe => 'DC' }, 'Undef but present value is kept';
ok dies { req( baz => 'Wonderwoman' ) }, 'A missing obligatory option dies';
ok lives { req( run => undef, baz => 'Wonderwoman' ) }, 'Passing the obligatory option lives, even if undefined';
#class cfoo 0.01 {
# field $baz;
# field $universe;
#
# method foo( $self, %options ) {
# option baz => $self->baz,
# option universe => $self->universe,
# \%options;
#
# return \%options
# }
#}
#my $f = cfoo->new( baz => 'objSuperman', universe => 'DC' );
#is $f->foo( baz => undef ), { baz => undef, universe => 'meth_DC' }, 'Positional parameters work';
done_testing;