I don't see a .../12.0/Common/General in my registry: I see .../16.0/Common/General, and .../14.0/Common/General, but .../12.0/Common (which does exist in mine) doesn't have a General subkey.
I think you're getting confused about subkeys vs. values. You have placed the 'general' subkey in a variable called $data. In the Win32::TieRegistry examples,$data holds a value, not a subkey.
The error you are getting seems to indicate that HKEY_CURRENT_USER\Software\Microsoft\Office\12.0\Common\General does not exist. Since it doesn't exist in my registry, that doesn't surprise me.
I have built up an SSCCE which uses the 16.0 version, and looks at a value in there (since I don't have the 12.0 'General' subkey)
#!perl
use warnings;
use strict;
use Data::Dumper;
use Win32::TieRegistry( Delimiter => '#', ArrayValues => 0);
my $pound = $Registry->Delimiter("/");
my $targetKey = $Registry->{"HKEY_CURRENT_USER/Software/Microsoft/Offi
+ce/16.0/Common"}
or die "Can't read the 'Common' key: $^E\n";
print STDERR "targetKey = '$targetKey'\n"; # this is the one you
+ called "data" before. It's not data, it's another key
my $generalKey = $targetKey->{"General"} # thhis is another subkey
or die "Can't read the 'General' subkey: $^E\n";
print STDERR "generalKey = '$generalKey'\n"; # this is the one y
+ou called "data" before. It's not data, it's another key
print STDERR Dumper $generalKey;
# here, you can access actual values from the key, with or without a p
+refixed slash
my $data = $generalKey->{'/Authorized'} // '<undef>';
printf STDERR qq("%s" => >>%s<<\n), '/Authorized', $data;
my $noslash = $generalKey->{'Authorized'} // '<undef>';
printf STDERR qq("%s" => >>%s<<\n), 'Authorized', $noslash;
my $dne = $generalKey->{'DoesNotExist'} // '<undef>';
printf STDERR qq("%s" => >>%s<<\n), 'DoesNotExist', $dne;
# update target key to 12.0:
$targetKey = $Registry->{"HKEY_CURRENT_USER/Software/Microsoft/Office/
+12.0/Common"}
or die "Can't read the '12.0/Common' key: $^E\n";
print STDERR "targetKey = '$targetKey'\n"; # this exists in mine
$generalKey = $targetKey->{"General"}
or die "Can't read the '12.0/Common/General' subkey: $^E\n";
print STDERR "generalKey = '$generalKey'\n"; # this doesn't exis
+t in mine, so it won't get here
__END__
generalKey = 'Win32::TieRegistry=HASH(0x26620c8)'
$VAR1 = bless( {
'/Xlstart' => 'XLSTART',
...
'/Authorized' => '0x7FFFFFFF',
...
}, 'Win32::TieRegistry' );
"/Authorized" => >>0x7FFFFFFF<<
"Authorized" => >>0x7FFFFFFF<<
"DoesNotExist" => >><undef><<
targetKey = 'Win32::TieRegistry=HASH(0x51e80a8)'
Can't read the '12.0/Common/General' subkey: The system cannot find th
+e file specified
I get a different error message than you got... but since you omitted code, who knows what else is different. Try my example, and see what you get. If it works the same, then you can try to tweak the code to make it do what you want. |