Aion-Env
view release on metacpan or search on metacpan
lib/Aion/Env.pm view on Meta::CPAN
if(UNIVERSAL::isa($isa, "Aion::Type")) { $isa->validate($val, $name) }
else {
local $_ = $val;
die UNIVERSAL::can($isa, "get_message")? $isa->get_message($val): "$name type is'nt isa!" unless $isa->();
}
}
constant->import("$pkg\::$name", $val);
}
my $BOM = "\x{feff}";
sub parse {
my ($file) = @_;
open my $f, '<:utf8', $file or die "$file: $!";
my %env;
my $interpolate = sub {
$_[0] =~ s!\$\{(\w+)\}!$env{$1}!ge;
};
while(<$f>) {
s/^$BOM// if $. == 1;
next if /^\s*(?:#|$)/;
if(my ($k, $v) = /^\s*([a-z_]\w*)\s*=\s*(.*?)\s*$/i) {
if($v =~ s/^(['"])(.*)\1\z/$2/) {
if($1 eq '"') {
$v =~ s/\\n/\n/g;
$v =~ s/\\//g;
$interpolate->($v);
}
}
( run in 0.768 second using v1.01-cache-2.11-cpan-c966e8aa7e8 )