Каковы побочные эффекты Data :: Dumper ()?

Если я закомментирую Dumper ($ cmd_string) , то цикл while никогда не будет принято.

Какие побочные эффекты Dumper () имеет на $ cmd_string?

Вот что $ cmd_string перед подвызовом:

VAR1 = {
    'The Java Runtime Library' => {
        'apt-get install -y' => 'sun-java6-jre'
    }
};


sub installPackages
{
    my $cmd_string = shift;
    my %rc_hash;

    my $rc;

    Dumper($cmd_string);

    for my $desc (keys %{$cmd_string})
    {
        while (my ($cmd, $arg) = each %{$cmd_string->{$desc}})
        {
            print "system($cmd $arg)\n";

            $rc = system("$cmd $arg");

            if ($rc)
            {
                $rc_hash{$desc}{$cmd} = '';
            }
        }
    }
    return \%rc_hash;
}

Если я запускаю отладчик Perl без Dumper () и использую команду x на $ cmd_string, тогда он работает, но если я просто прошагу по коду, это не сработает.

Это только после прохождения кода в конце подпрограммы

  DB<3> x $cmd_string
0  HASH(0x2769550)
   '' => HASH(0x2769880)
        empty hash
   'The Java Runtime Library' => HASH(0x25cc2a0)
      'apt-get install -y' => 'sun-java6-jre'
  DB<4> x $cmd_string->{$desc}
0  HASH(0x2769880)
     empty hash

Теперь, если я x $ cmd_string перед циклом for, я получаю это в конце из подпрограммы

main::installPackages(msi.pl:1979):       return \%rc_hash;
  DB<3> x $cmd_string
0  HASH(0x1125490)
   'The Java Runtime Library' => HASH(0xf852a0)
      'apt-get install -y' => 'sun-java6-jre'
7
задан Peter Mortensen 24 April 2016 в 10:23
поделиться