2009-03-24 1 views
3

Использование Cygwin Perl v5.8.8 и Win32 :: TieRegistry 0.26.Почему не может быть список под Win32 :: TieRegistry?

Мы можем получить привязанную хэш-объект вещь для HKEY_CURRENT_USER:

$ 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. 

ответ

2

с кодом:

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

Я получаю этот результат на моей машине (WinXP, ActiveState Perl v5.10.0, Win32-TieRegistry 0,25) :

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

и это то, что я получаю с вашим вторым образцом коды:

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

Итак, оба образца кода работают нормально, на ActiveState Perl и Windows XP как минимум.

EDIT: Это выглядит как более общей проблемы/ошибки:

+0

У меня такая же проблема на cygwin с perl 5.10.1 и TieRegistry v0.25 – dsummersl