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.389 second using v1.01-cache-2.11-cpan-c966e8aa7e8 )