我有一个脚本,它从文件中加载具有IP并且对应于该客户端名称的数据。如下所示
XX.XX.XX.XX = ABC
xx.yy.yyy.xk = BCD
在一个数组中,我有一个IP列表,所以从上面的数据中我们得到了数组中IP的客户端名称。
my @ips = split( /\,/, $key );
for my $ip ( @ips ) {
$name = $hash{Client_Map}{$ip};
}
现在,我在文件中的文件中包含了IP以及普通IP,如
XX.XX.XX.0-244 = BDE
XX.XX.XY.14-44 = TEST
XX.XX.XX.XX = ABC
xx.yy.yyy.xk = BCD
我们如何处理匹配代码中的这些IP以获取客户端名称。为了加载文件,我们使用use Config::General
Perl模块。
答案 0 :(得分:3)
使用Config :: General读取配置哈希后,您需要迭代它,查找范围的键,然后删除它们。使用范围中的两个值将新键插入哈希值。
Perl的range operator ..
是一种方便的方法。 delete
返回已删除密钥的值也很好。
my $client_map = {
'127.0.0.1' => 'FOO',
'XX.XX.XX.0-244' => 'BDE',
'XX.XX.XY.14-44' => 'TEST',
};
foreach my $ip_or_range ( keys %{$client_map} ) {
if ( my ( $lower, $upper ) = $ip_or_range =~ m/(\d+)-(\d+)$/ ) {
my $name = delete $client_map->{$ip_or_range};
$ip_or_range =~ s/[^\.]+$//;
$client_map->{ $ip_or_range . $_ } = $name for $lower .. $upper;
}
}
现在哈希看起来像这样。
\ {
127.0.0.1 "FOO",
XX.XX.XX.0 "BDE",
XX.XX.XX.1 "BDE",
XX.XX.XX.2 "BDE",
XX.XX.XX.3 "BDE",
XX.XX.XX.4 "BDE",
XX.XX.XX.5 "BDE",
XX.XX.XX.6 "BDE",
XX.XX.XX.7 "BDE",
XX.XX.XX.8 "BDE",
XX.XX.XX.9 "BDE",
XX.XX.XX.10 "BDE",
XX.XX.XX.11 "BDE",
XX.XX.XX.12 "BDE",
XX.XX.XX.13 "BDE",
XX.XX.XX.14 "BDE",
XX.XX.XX.15 "BDE",
XX.XX.XX.16 "BDE",
XX.XX.XX.17 "BDE",
XX.XX.XX.18 "BDE",
XX.XX.XX.19 "BDE",
XX.XX.XX.20 "BDE",
XX.XX.XX.21 "BDE",
XX.XX.XX.22 "BDE",
XX.XX.XX.23 "BDE",
XX.XX.XX.24 "BDE",
XX.XX.XX.25 "BDE",
XX.XX.XX.26 "BDE",
XX.XX.XX.27 "BDE",
XX.XX.XX.28 "BDE",
XX.XX.XX.29 "BDE",
XX.XX.XX.30 "BDE",
XX.XX.XX.31 "BDE",
XX.XX.XX.32 "BDE",
XX.XX.XX.33 "BDE",
XX.XX.XX.34 "BDE",
XX.XX.XX.35 "BDE",
XX.XX.XX.36 "BDE",
XX.XX.XX.37 "BDE",
XX.XX.XX.38 "BDE",
XX.XX.XX.39 "BDE",
XX.XX.XX.40 "BDE",
XX.XX.XX.41 "BDE",
XX.XX.XX.42 "BDE",
XX.XX.XX.43 "BDE",
XX.XX.XX.44 "BDE",
XX.XX.XX.45 "BDE",
XX.XX.XX.46 "BDE",
XX.XX.XX.47 "BDE",
XX.XX.XX.48 "BDE",
XX.XX.XX.49 "BDE",
XX.XX.XX.50 "BDE",
XX.XX.XX.51 "BDE",
XX.XX.XX.52 "BDE",
XX.XX.XX.53 "BDE",
XX.XX.XX.54 "BDE",
XX.XX.XX.55 "BDE",
XX.XX.XX.56 "BDE",
XX.XX.XX.57 "BDE",
XX.XX.XX.58 "BDE",
XX.XX.XX.59 "BDE",
XX.XX.XX.60 "BDE",
XX.XX.XX.61 "BDE",
XX.XX.XX.62 "BDE",
XX.XX.XX.63 "BDE",
XX.XX.XX.64 "BDE",
XX.XX.XX.65 "BDE",
XX.XX.XX.66 "BDE",
XX.XX.XX.67 "BDE",
XX.XX.XX.68 "BDE",
XX.XX.XX.69 "BDE",
XX.XX.XX.70 "BDE",
XX.XX.XX.71 "BDE",
XX.XX.XX.72 "BDE",
XX.XX.XX.73 "BDE",
XX.XX.XX.74 "BDE",
XX.XX.XX.75 "BDE",
XX.XX.XX.76 "BDE",
XX.XX.XX.77 "BDE",
XX.XX.XX.78 "BDE",
XX.XX.XX.79 "BDE",
XX.XX.XX.80 "BDE",
XX.XX.XX.81 "BDE",
XX.XX.XX.82 "BDE",
XX.XX.XX.83 "BDE",
XX.XX.XX.84 "BDE",
XX.XX.XX.85 "BDE",
XX.XX.XX.86 "BDE",
XX.XX.XX.87 "BDE",
XX.XX.XX.88 "BDE",
XX.XX.XX.89 "BDE",
XX.XX.XX.90 "BDE",
XX.XX.XX.91 "BDE",
XX.XX.XX.92 "BDE",
XX.XX.XX.93 "BDE",
XX.XX.XX.94 "BDE",
XX.XX.XX.95 "BDE",
XX.XX.XX.96 "BDE",
XX.XX.XX.97 "BDE",
XX.XX.XX.98 "BDE",
XX.XX.XX.99 "BDE",
XX.XX.XX.100 "BDE",
XX.XX.XX.101 "BDE",
XX.XX.XX.102 "BDE",
XX.XX.XX.103 "BDE",
XX.XX.XX.104 "BDE",
XX.XX.XX.105 "BDE",
XX.XX.XX.106 "BDE",
XX.XX.XX.107 "BDE",
XX.XX.XX.108 "BDE",
XX.XX.XX.109 "BDE",
XX.XX.XX.110 "BDE",
XX.XX.XX.111 "BDE",
XX.XX.XX.112 "BDE",
XX.XX.XX.113 "BDE",
XX.XX.XX.114 "BDE",
XX.XX.XX.115 "BDE",
XX.XX.XX.116 "BDE",
XX.XX.XX.117 "BDE",
XX.XX.XX.118 "BDE",
XX.XX.XX.119 "BDE",
XX.XX.XX.120 "BDE",
XX.XX.XX.121 "BDE",
XX.XX.XX.122 "BDE",
XX.XX.XX.123 "BDE",
XX.XX.XX.124 "BDE",
XX.XX.XX.125 "BDE",
XX.XX.XX.126 "BDE",
XX.XX.XX.127 "BDE",
XX.XX.XX.128 "BDE",
XX.XX.XX.129 "BDE",
XX.XX.XX.130 "BDE",
XX.XX.XX.131 "BDE",
XX.XX.XX.132 "BDE",
XX.XX.XX.133 "BDE",
XX.XX.XX.134 "BDE",
XX.XX.XX.135 "BDE",
XX.XX.XX.136 "BDE",
XX.XX.XX.137 "BDE",
XX.XX.XX.138 "BDE",
XX.XX.XX.139 "BDE",
XX.XX.XX.140 "BDE",
XX.XX.XX.141 "BDE",
XX.XX.XX.142 "BDE",
XX.XX.XX.143 "BDE",
XX.XX.XX.144 "BDE",
XX.XX.XX.145 "BDE",
XX.XX.XX.146 "BDE",
XX.XX.XX.147 "BDE",
XX.XX.XX.148 "BDE",
XX.XX.XX.149 "BDE",
XX.XX.XX.150 "BDE",
XX.XX.XX.151 "BDE",
XX.XX.XX.152 "BDE",
XX.XX.XX.153 "BDE",
XX.XX.XX.154 "BDE",
XX.XX.XX.155 "BDE",
XX.XX.XX.156 "BDE",
XX.XX.XX.157 "BDE",
XX.XX.XX.158 "BDE",
XX.XX.XX.159 "BDE",
XX.XX.XX.160 "BDE",
XX.XX.XX.161 "BDE",
XX.XX.XX.162 "BDE",
XX.XX.XX.163 "BDE",
XX.XX.XX.164 "BDE",
XX.XX.XX.165 "BDE",
XX.XX.XX.166 "BDE",
XX.XX.XX.167 "BDE",
XX.XX.XX.168 "BDE",
XX.XX.XX.169 "BDE",
XX.XX.XX.170 "BDE",
XX.XX.XX.171 "BDE",
XX.XX.XX.172 "BDE",
XX.XX.XX.173 "BDE",
XX.XX.XX.174 "BDE",
XX.XX.XX.175 "BDE",
XX.XX.XX.176 "BDE",
XX.XX.XX.177 "BDE",
XX.XX.XX.178 "BDE",
XX.XX.XX.179 "BDE",
XX.XX.XX.180 "BDE",
XX.XX.XX.181 "BDE",
XX.XX.XX.182 "BDE",
XX.XX.XX.183 "BDE",
XX.XX.XX.184 "BDE",
XX.XX.XX.185 "BDE",
XX.XX.XX.186 "BDE",
XX.XX.XX.187 "BDE",
XX.XX.XX.188 "BDE",
XX.XX.XX.189 "BDE",
XX.XX.XX.190 "BDE",
XX.XX.XX.191 "BDE",
XX.XX.XX.192 "BDE",
XX.XX.XX.193 "BDE",
XX.XX.XX.194 "BDE",
XX.XX.XX.195 "BDE",
XX.XX.XX.196 "BDE",
XX.XX.XX.197 "BDE",
XX.XX.XX.198 "BDE",
XX.XX.XX.199 "BDE",
XX.XX.XX.200 "BDE",
XX.XX.XX.201 "BDE",
XX.XX.XX.202 "BDE",
XX.XX.XX.203 "BDE",
XX.XX.XX.204 "BDE",
XX.XX.XX.205 "BDE",
XX.XX.XX.206 "BDE",
XX.XX.XX.207 "BDE",
XX.XX.XX.208 "BDE",
XX.XX.XX.209 "BDE",
XX.XX.XX.210 "BDE",
XX.XX.XX.211 "BDE",
XX.XX.XX.212 "BDE",
XX.XX.XX.213 "BDE",
XX.XX.XX.214 "BDE",
XX.XX.XX.215 "BDE",
XX.XX.XX.216 "BDE",
XX.XX.XX.217 "BDE",
XX.XX.XX.218 "BDE",
XX.XX.XX.219 "BDE",
XX.XX.XX.220 "BDE",
XX.XX.XX.221 "BDE",
XX.XX.XX.222 "BDE",
XX.XX.XX.223 "BDE",
XX.XX.XX.224 "BDE",
XX.XX.XX.225 "BDE",
XX.XX.XX.226 "BDE",
XX.XX.XX.227 "BDE",
XX.XX.XX.228 "BDE",
XX.XX.XX.229 "BDE",
XX.XX.XX.230 "BDE",
XX.XX.XX.231 "BDE",
XX.XX.XX.232 "BDE",
XX.XX.XX.233 "BDE",
XX.XX.XX.234 "BDE",
XX.XX.XX.235 "BDE",
XX.XX.XX.236 "BDE",
XX.XX.XX.237 "BDE",
XX.XX.XX.238 "BDE",
XX.XX.XX.239 "BDE",
XX.XX.XX.240 "BDE",
XX.XX.XX.241 "BDE",
XX.XX.XX.242 "BDE",
XX.XX.XX.243 "BDE",
XX.XX.XX.244 "BDE",
XX.XX.XY.14 "TEST",
XX.XX.XY.15 "TEST",
XX.XX.XY.16 "TEST",
XX.XX.XY.17 "TEST",
XX.XX.XY.18 "TEST",
XX.XX.XY.19 "TEST",
XX.XX.XY.20 "TEST",
XX.XX.XY.21 "TEST",
XX.XX.XY.22 "TEST",
XX.XX.XY.23 "TEST",
XX.XX.XY.24 "TEST",
XX.XX.XY.25 "TEST",
XX.XX.XY.26 "TEST",
XX.XX.XY.27 "TEST",
XX.XX.XY.28 "TEST",
XX.XX.XY.29 "TEST",
XX.XX.XY.30 "TEST",
XX.XX.XY.31 "TEST",
XX.XX.XY.32 "TEST",
XX.XX.XY.33 "TEST",
XX.XX.XY.34 "TEST",
XX.XX.XY.35 "TEST",
XX.XX.XY.36 "TEST",
XX.XX.XY.37 "TEST",
XX.XX.XY.38 "TEST",
XX.XX.XY.39 "TEST",
XX.XX.XY.40 "TEST",
XX.XX.XY.41 "TEST",
XX.XX.XY.42 "TEST",
XX.XX.XY.43 "TEST",
XX.XX.XY.44 "TEST"
}