如何解决哈希中的特定键值
我只想知道键“ DelayedAutoStart”的值,并希望此代码有效,但是它会打印出更多信息。有人可以告诉我这是怎么回事吗?
use Win32::Registry;
use Data::Dumper;
$p = "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion";
$p = "SYSTEM\\CurrentControlSet\\Services\\sppsvc";
$main::HKEY_LOCAL_MACHINE->Open($p,$CurrVer) ||
die "Open: $!";
$CurrVer->GetValues(\%vals);
#print Dumper(\%vals);
foreach $k (keys %vals) {
$key = $vals{$k};
if ($$key[0] == "DelayedAutoStart")
{
print "$$key[0] = $$key[2]\n";
}
}
结果:
ServiceSidType = 1
ErrorControl = 1
LaunchProtected = 1
DisplayName = @%SystemRoot%\system32\sppsvc.exe,-101
Start = 2
ImagePath = %SystemRoot%\system32\sppsvc.exe
Description = @%SystemRoot%\system32\sppsvc.exe,-100
DelayedAutoStart = 1
ObjectName = NT AUTHORITY\NetworkService
RequiredPrivileges = SeAuditPrivilege SeChangeNotifyPrivilege
SeCreateGlobalPrivilege SeImpersonatePrivilege
FailureActions = ÇQ☺ ♥ ¶ ☺ └È☺ ☺ Óô♦︎
DependOnService = RpcSs
Type = 16
解决方法
请在您的代码中添加use strict
和use warnings
。他们会给您一个错误,告诉您您使用的是错误的比较运算符。 ==
等于运算符用于比较数字而不是字符串。您需要eq
来进行字符串比较。
此外,您还使事情变得混乱,而不是将散列值存储在名为$key
的变量中,并且通常使事情变得复杂得多!
foreach my $key (keys %vals) {
if ($key eq "DelayedAutoStart")
{
print "$key = $vals{$key}[2]\n";
}
}
但是,当然,您可以直接在哈希中查找值。无需迭代键。那几乎就是使用散列的重点:-)
my $key = 'DelayedAutoStart';
if (exists $vals{$key}) {
print "$vals{$key} = $vals{$key}[2]\n";
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。