# Filename validate_options.pm use strict; use warnings; use Carp; sub validate_options{ my $self = shift; my $valid = shift; # hasref valide key's my $opt = shift; # hashref Options return if ! defined $opt; my $sub = ( caller( 1 ) )[3]; $sub =~ s/^.+::(?:__)?([^:]+)\z/$1/; $sub .= ':'; for my $key ( keys %$opt ) { if ( ! exists $valid->{$key} ) { croak "$sub '$key' is not a valid option name"; } next if ! defined $opt->{$key}; if ( $valid->{$key} eq 'Str' ) { croak "$sub $key => references are not valid values." if ref $opt->{$key} ne ''; } elsif ( $opt->{$key} !~ m/^$valid->{$key}\z/x ) { croak "$sub $key => '$opt->{$key}' is not a valid value."; } $self->{$key} = $opt->{$key}; } } 1;