#  ModifyUserEnvVars.pl
#  Example 6.6:
#  ----------------------------------------
#  From "Win32 Perl Scripting: Administrators Handbook" by Dave Roth
#  Published by New Riders Publishing.
#  ISBN # 1-57870-215-1
#
#  This script shows how to update Perl's copy of environment variables.

use Win32;
use Win32::AdminMisc;

Win32::AdminMisc::GetEnvVar( \%System, ENV_SYSTEM );
Win32::AdminMisc::GetEnvVar( \%User, ENV_USER );

@NewUserVar = ();

foreach $VarName ( keys( %System ) )
{
    if( defined $User{$VarName} )
    {
        if( $System{$VarName} =~ /_$VarName/ )
        {
            push( @NewUserVar, $VarName );
        }
    }
}

# Modify the user env var space
foreach $VarName ( @NewUserVar )
{
    print "Setting new user var: _$VarName\n";
    if( Win32::AdminMisc::SetEnvVar( "_$VarName", $User{$VarName}, ENV_USER ) )
    {
        $ENV{"_$VarName"} = $User{$VarName};

        # Remove conflicting user env vars
        print "Deleting user var: $VarName\n";
        if( Win32::AdminMisc::DelEnvVar( $VarName, ENV_USER ) )
        {
            delete $ENV{$VarName};
        }
    }
}
