3

Cygwin Perl v5.8.8 および Win32::TieRegistry 0.26 を使用。

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

1 に答える 1

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 = '\\';

そして、これは私があなたの2番目のコードサンプルで得たものです:

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

したがって、少なくとも ActiveState Perl と Windows XP では、どちらのコード サンプルも問題なく動作します。

編集:これは、より一般的な問題/バグのように見えます:

于 2009-03-24T16:30:16.163 に答える