The Perl and Raku Conference 2025: Greenville, South Carolina - June 27-29 Learn more

use strict;
use 5.10.0;
our $VERSION = '1.772';
use Exporter qw( import );
our @EXPORT_OK = qw( validate_options );
use Carp qw( croak );
sub validate_options {
my ( $valid, $opt, $caller ) = @_;
return if ! defined $opt; #
if ( ! defined $caller ) { #
$caller = '';
};
for my $key ( keys %$opt ) {
if ( ! exists $valid->{$key} ) {
croak "$caller: '$key' is not a valid option name";
}
next if ! defined $opt->{$key};
if ( $valid->{$key} =~ /^Array/ ) {
croak "$caller: option '$key' => the passed value has to be an ARRAY reference." if ref $opt->{$key} ne 'ARRAY';
if ( $valid->{$key} eq 'Array_Int' ) {
for ( @{$opt->{$key}} ) {
defined or croak "$caller: option '$key' => undefined array element";
/^[0-9]+\z/ or croak "$caller: option '$key' => $_ is an invalid array element";
}
}
}
elsif ( $valid->{$key} =~ /^Regexp/ ) {
croak "$caller: option '$key' => the passed value has to be a regex quoted with the 'qr' operator." if ref $opt->{$key} ne 'Regexp';
}
elsif ( ref $opt->{$key} ) {
croak "$caller: option '$key' => a reference is not a valid value.";
}
elsif ( $valid->{$key} eq 'Str' ) {
}
elsif ( $opt->{$key} !~ m/^$valid->{$key}\z/x ) {
croak "$caller: option '$key' => '$opt->{$key}' is not a valid value.";
}
}
}
1;