Ab.の日記: environment variable management
日記 by
Ab.
use Win32::Registry;
use strict;
my ($systemenvkey, $userenvkey);
my %userenv;
sub
substitute_var1
{
my $var = $_[0];
if (exists($userenv{$var})) {
return &substitute_vars($userenv{$var});
}
return "{$var}";
}
sub
substitute_vars
{
my $str = $_[0];
$str =~ s/{([A-Za-z0-9_]+)}/&substitute_var1($1)/eg;
return $str;
}
if (0) {
$::HKEY_LOCAL_MACHINE->Open(
"SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Environment", $systemenvkey)
or die "Can't open system env key: $^E";
}
$::HKEY_CURRENT_USER->Open("Environment", $userenvkey)
or die "Can't open user env key: $^E";
my ($varname, $varvalue, $separator);
open(HD, "<$ARGV[0]") or die;
while ($_=<HD>) {
chomp;
next
if (m/^#/);
if (m/=/) {
$varname = $`;
$varvalue = &substitute_vars($');
}elsif (m/\($/) {
$varname = $`;
$varvalue = "";
$separator = ";";
while ($_=<HD>) {
chomp;
last
if ($_ eq ")");
$varvalue .= $separator
if ($varvalue ne "");
$varvalue .= &substitute_vars($_);
}
}
$userenv{$varname} = $varvalue;
}
close(HD);
foreach my $k (sort keys %userenv) {
print "[$k] = [$userenv{$k}]\n";
$userenvkey->SetValueEx($k, 0, REG_SZ, $userenv{$k});
}
use strict;
my ($systemenvkey, $userenvkey);
my %userenv;
sub
substitute_var1
{
my $var = $_[0];
if (exists($userenv{$var})) {
return &substitute_vars($userenv{$var});
}
return "{$var}";
}
sub
substitute_vars
{
my $str = $_[0];
$str =~ s/{([A-Za-z0-9_]+)}/&substitute_var1($1)/eg;
return $str;
}
if (0) {
$::HKEY_LOCAL_MACHINE->Open(
"SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Environment", $systemenvkey)
or die "Can't open system env key: $^E";
}
$::HKEY_CURRENT_USER->Open("Environment", $userenvkey)
or die "Can't open user env key: $^E";
my ($varname, $varvalue, $separator);
open(HD, "<$ARGV[0]") or die;
while ($_=<HD>) {
chomp;
next
if (m/^#/);
if (m/=/) {
$varname = $`;
$varvalue = &substitute_vars($');
}elsif (m/\($/) {
$varname = $`;
$varvalue = "";
$separator = ";";
while ($_=<HD>) {
chomp;
last
if ($_ eq ")");
$varvalue .= $separator
if ($varvalue ne "");
$varvalue .= &substitute_vars($_);
}
}
$userenv{$varname} = $varvalue;
}
close(HD);
foreach my $k (sort keys %userenv) {
print "[$k] = [$userenv{$k}]\n";
$userenvkey->SetValueEx($k, 0, REG_SZ, $userenv{$k});
}
environment variable management More ログイン