Question

Utilisation de Cygwin Perl v5.8.8 et Win32 :: TieRegistry 0.26.

Nous pouvons obtenir un objet de hachage lié pour 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' );

Et cela fonctionne pour les sous-clés :

$ 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' );

Et nous pouvons imprimer les informations sur la clé :

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

Cependant, la documentation implique que nous pouvons lister les sous-clés simplement en les traitant comme un hachage :

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

Mais le tableau est vide.Est-ce cassé ou est-ce que je fais quelque chose de mal ?Existe-t-il une autre façon de lister les sous-clés ?

Cela ne fonctionne pas non plus :

$ 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.
Était-ce utile?

La solution

Avec votre code :

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

J'obtiens ce résultat sur ma machine (WinXP, ActiveState Perl v5.10.0, Win32-TieRegistry 0.25) :

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

et voici ce que j'obtiens avec votre deuxième exemple de code :

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

Ainsi, vos deux exemples de code fonctionnent correctement, au moins sur ActiveState Perl et Windows XP.

MODIFIER:Cela ressemble à un problème/bug plus général :

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top