从一系列perl

时间:2017-02-13 13:55:00

标签: perl

我有一个脚本,它从文件中加载具有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模块。

1 个答案:

答案 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"
}