1

IP アドレスのリストを、対応するユーザー名、電子メール アドレス、および国とともに 1 行ずつ出力するスクリプトが必要です。コマンドを実行するために複数の IP アドレスを取得するにはどうすればよいですか? ループを実行しようとしましたが、IP アドレスが 1 行しか表示されませんでした。出力を次のようにしたいと思います。

1 | login | emailadd@yahoo.com | 160.79.208.82 | United States
16 | login1 | emailadd@yahoo.com | 61.95.83.10 | Italy
23 | login2 | emailadd@gmail.com | 81.48.63.93 | Australia
36 | login3 | emailadd@yahoo.com | 38.117.170.82 | Japan
51 | login4 | emailadd@gmail.com | 2.233.30.85 | Mexico

これが私のコードです:

#!/usr/bin/perl -w
use lib '~/lib';
use strict;
use Net::IPInfoDB;

my $g = Net::IPInfoDB->new;
$g->key(api_key);

my $login = '1 | login | emailadd@yahoo.com | 160.79.208.82
            16 | login1 | emailadd@yahoo.com | 61.95.83.10 
            23 | login2 | emailadd@gmail.com | 81.48.63.93 
            36 | login3 | emailadd@yahoo.com | 38.117.170.82 
            51 | login4 | emailadd@gmail.com | 2.233.30.85';

$login =~ /(\d+\.\d+\.\d+\.\d+)/;

my $city = $g->get_city("$1");
my $addr = $g->get_country("$1");


printf "$login | (%s, %s)\n",
$city->city_name, $addr->country_name;
4

3 に答える 3

1

アレイを使用しないことに固執したい場合は、IP アドレスを取得するための解決策を次に示します。

while ($login =~ m/(\d+\.\d+\.\d+\.\d+)/g) {
    print "$1\n";
}
于 2013-11-14T15:16:08.603 に答える