Sun751 has asked for the wisdom of the Perl Monks concerning the following question:

I got a question regarding environment variable:- In my config file I have $ENV(appl) assigned to some variable. And I am running the Perl script to read that config file (update few records, expand environment variable) then write it to some output file, could any one guide me how can I expand that environment variable? through my perl script, For example in my config file: Id = $ENV{APPL} but while writing to output file I want, Id = '/ann/dev/sum' Any Suggestion, Please Cheers

Replies are listed 'Best First'.
Re: expanding Environment variable
by mscharrer (Hermit) on Jun 25, 2009 at 09:44 UTC
    Your post is a little confusing and not well formatted (HTML can be a bi+<# ).

    I have interpreted your post that your config file really contains the following string:

    Id = $ENV{APPL}
    Why using perl syntax here?

    I also assume that the file and its lines got already parsed so you end up with a variable holding the string '$ENV{APPL}'. You could simply eval this string:

    $string = '$ENV{APPL}'; $var = eval $string;
    However, this is very dangerous because the config file could also hold any other Perl code there, e.g. code which deletes your complete hard drive.

    Therefore it is safer to extract the 'APPL' part using a regular expression:

    if ($string =~ /\$ENV{([^}]+)}/) { $var = $ENV{$1}; }
    The regular expression could also be /\$ENV\s*{\s*(.*?)\s*}$/ to allow for spaces before and after the braces.

    I hope this is what you wanted.