#!perl.exe -w replace for real OSs use strict; use warnings; my $debug = 1; sub get_value # used in substitution { my ($ref_values, $key) = @_; print " look for $key ?\n" if $debug; my $result = ( exists $ref_values->{$key} ) # if exists ... ? $ref_values->{$key} # return Value : "*ERR*" # else return *ERR* } sub generate_file { my ($templ_file, $ref_inivars, $target_file) = @_; open IN, "<$templ_file" or return -1; open OUT, ">$target_file" or return -2; while ( my $line = ) { $line=~s/\$\((\w+)\)/&get_value($ref_inivars,$1)/ge; print OUT $line; } return 0; } #------------------ # Use the Code generate_file ( "./template/inifile.ini", { %ENV, # just to demonstrate 'RUNTIME' => "~/prod/test/v1.2/bin", 'VERSION' => "v1.2", 'ENVIRONMENT' => "test" 'DATABASE' => "L63DTST", }, "result.ini" );