【发布时间】:2018-04-13 11:34:00
【问题描述】:
我正在尝试使用此代码将 lshw 输出解析为哈希,目前为止有效。
use strict;
use warnings;
my (%lshw,$key,$value);
while (<>){
s/#.*//; # no comments
s/^\s+//; # no leading whites
s/\s+$//; # no trailing whites
next unless length; # anything left?
if (/(?<key>.*?):\s+(?<value>.*)/x){
$lshw{$+{key}} = $+{value};
}
}
# remove white spaces in hash keys
for $key (keys %lshw){
$value = delete $lshw{$key};
for ($key){
s/\s+//g;
}
$lshw{$key} = $value;
}
my $logname = $lshw{'logicalname'};
print "Logical name\t $logname\n";
但是当我遇到以下配置时我会感到挣扎:
clock: 33Mhz
width: 32 bits
capacity: 1Gbit/s
configuration:autonegotiation=on broadcast=yes driver=igb driverversion=5.3.0-k duplex=full firmware=1.63, 0x800009fa ip=[REMOVED] latency=0 link=yes multicast=yes port=twisted pair speed=1Gbit/s`
我正在尝试一种 hoh 方法,但没有找到如何拆分键/值的解决方案,因为它包含多个单词值,例如 port=twisted pair。
关键始终是一个单词。
谁能告诉我如何解决这个问题?
(感谢 simbabque 的严格/警告提示)
【问题讨论】:
-
=左边的config键总是一个字吗? -
另外,您想使用
use strict和use warnings并使用它们编译您的脚本,然后更新代码。你可以edit你的问题。 -
到目前为止,您的代码只获得了
key: value....的东西,但它不处理该值内的各个对。您是否忘记将该代码添加到问题中?