#!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/Office/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 you 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 prefixed slash my $data = $generalKey->{'/Authorized'} // ''; printf STDERR qq("%s" => >>%s<<\n), '/Authorized', $data; my $noslash = $generalKey->{'Authorized'} // ''; printf STDERR qq("%s" => >>%s<<\n), 'Authorized', $noslash; my $dne = $generalKey->{'DoesNotExist'} // ''; 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 exist 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" => >><< targetKey = 'Win32::TieRegistry=HASH(0x51e80a8)' Can't read the '12.0/Common/General' subkey: The system cannot find the file specified