パスワードを忘れた? アカウント作成
679612 journal

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});
}
この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
typodupeerror

あと、僕は馬鹿なことをするのは嫌いですよ (わざとやるとき以外は)。-- Larry Wall

読み込み中...