perl - 哈希中的特定键值
问题描述
我只想知道键“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";
}
推荐阅读
- android - 将vectorDrawables与androidx一起使用的更新
- gmail-api - 拦截 gmails/outlook 传入电子邮件以进行进一步检查
- angular - 点击事件 - 我有 3 个手风琴,我想知道如何只使用一种方法一次管理一个事件
- python-3.x - 如何使用 REST 的 put 函数替代 post 函数来保存多个数据?
- javascript - 从Angular JS中的不同应用程序加载模板
- ruby-on-rails - 在 Docker Rails 中更改 Postgres 端口
- javascript - array.filter() 删除
函数表达式中的值,而不是箭头函数中的值 - node.js - 使用nodejs从多个集合中获取mongodb集合记录
- android - 如果我的列表为空,如何显示图像?
- ios - 识别标签中显示的属性字符串中的图像点击