Perl environment config with validation
Perl
use strict;
use warnings;
sub env_config {
my (%spec) = @_;
my %cfg;
for my $key (sort keys %spec) {
my $rule = $spec{$key};
my $raw = $ENV{ $rule->{env} // $key };
$raw = $rule->{default} if !defined $raw || $raw eq '';
die "missing required env $key\n" if !defined $raw && $rule->{required};
if (defined $raw && ($rule->{type} // '') eq 'int') {
die "env $key must be an integer\n" unless $raw =~ /\A-?\d+\z/;
$raw += 0;
}
$cfg{$key} = $raw if defined $raw;
}
return \%cfg;
}
my $cfg = env_config(port => { type => 'int', default => 8080 }, debug => { default => 0 });
print "$cfg->{port} $cfg->{debug}\n";