代码之家  ›  专栏  ›  技术社区  ›  Martin Fido

为什么Win32::TieRegistry不能列出子键?

  •  3
  • Martin Fido  · 技术社区  · 16 年前

    $ perl -e '
    my %RegHash;
    use Win32::TieRegistry( TiedHash => \%RegHash );
    use Data::Dumper;
    my $Key = $RegHash{"HKEY_CURRENT_USER"};
    print Dumper $Key;'
    $VAR1 = bless( {}, 'Win32::TieRegistry' );
    

    这适用于子密钥:

    $ perl -e '
    my %RegHash;
    use Win32::TieRegistry( TiedHash => \%RegHash );
    use Data::Dumper;
    my $Key = $RegHash{"HKEY_CURRENT_USER\\Software"};
    print Dumper $Key;'
    $VAR1 = bless( {}, 'Win32::TieRegistry' );
    

    我们可以打印密钥的信息:

    $ perl -e '
    my %RegHash;
    use Win32::TieRegistry( TiedHash => \%RegHash );
    use Data::Dumper;
    my $Key = $RegHash{"HKEY_CURRENT_USER\\Software"};
    print Dumper $Key->Information;'
    $VAR1 = 'CntSubKeys';
    $VAR2 = 48;
    $VAR3 = 'MaxSubClassLen';
    $VAR4 = 21;
    ...
    

    然而,文档暗示我们可以通过将其视为哈希来简单地列出子键:

    $ perl -e '
    my %RegHash;
    use Win32::TieRegistry( TiedHash => \%RegHash );
    use Data::Dumper;
    my $Key = $RegHash{"HKEY_CURRENT_USER\\Software"};
    print Dumper keys %$Key; '
    

    但是数组是空的。是坏了还是我做错了什么?是否有其他方法列出子密钥?

    $ perl -e '
    my %RegHash;
    use Win32::TieRegistry( TiedHash => \%RegHash );
    use Data::Dumper;
    my $Key = $RegHash{"HKEY_CURRENT_USER\\Software"};
    print Dumper $Key->SubKeyNames;'
    Can't use an undefined value as an ARRAY reference at
    /usr/lib/perl5/vendor_perl/5.8/cygwin/Win32/TieRegistry.pm line 720.
    
    1 回复  |  直到 16 年前
        1
  •  2
  •   Tomalak    16 年前

    使用您的代码:

    my %RegHash;
    use Win32::TieRegistry( TiedHash => \%RegHash );
    use Data::Dumper;
    my $Key = $RegHash{"HKEY_CURRENT_USER\\Software"};
    print Dumper keys %$Key;
    

    $VAR1 = 'Adobe\\';
    ...
    $VAR101 = 'Classes\\';
    $VAR102 = '\\';
    

    这是我从你的第二个代码示例中得到的结果:

    $VAR1 = 'Adobe';
    ...
    $VAR101 = 'Classes';
    

    编辑:这看起来像是一个更普遍的问题/bug: