package pm_moose_default_params;
use Moose;
has colour => (
is => 'rw',
isa => 'Str',
required => 0,
lazy => 1,
default => 'red',
);
has shape => (
is => 'rw',
isa => 'Str',
required => 0,
lazy => 1,
default => 'circle',
);
no Moose;
__PACKAGE__->meta->make_immutable;
####
#!/usr/bin/env perl
use 5.010;
use strict;
use warnings;
use Getopt::Long;
use pm_moose_default_params;
my $colour = '';
my $shape = '';
GetOptions('colour=s' => \$colour, 'shape=s' => \$shape);
say "Option --colour = $colour";
say "Option --shape = $shape";
my %param;
$param{colour} = $colour if $colour;
$param{shape} = $shape if $shape;
say "Param $_ = $param{$_}" for keys %param;
my $object = pm_moose_default_params::->new(%param);
say 'Moose colour = ', $object->colour;
say 'Moose shape = ', $object->shape;
####
$ pm_moose_default_params.pl
Option --colour =
Option --shape =
Moose colour = red
Moose shape = circle
$ pm_moose_default_params.pl --colour=blue
Option --colour = blue
Option --shape =
Param colour = blue
Moose colour = blue
Moose shape = circle
$ pm_moose_default_params.pl --shape=square
Option --colour =
Option --shape = square
Param shape = square
Moose colour = red
Moose shape = square
$ pm_moose_default_params.pl --colour=blue --shape=square
Option --colour = blue
Option --shape = square
Param colour = blue
Param shape = square
Moose colour = blue
Moose shape = square