use strict; use warnings; use validate_options; # Factory Method sub new{ my $class = shift; my %opts = @_; my $self = bless{}, $class; $self->validate_options({name => 'foo'}, \%opts); } my $o = main->new( foo => 'bar' ); # new: 'foo' is not a valid option name at ... my $o = main->new( name => 'foo' ); # OK!