私はこのコードに2日間頭をぶつけましたが、成功しませんでした。私がする必要があるのは、この形式のネットワークの長いリストから始まるIPアドレスのリストを取得することです。
ネットワークNUMBER_OF_HOSTS192.168.1.0512
Net:IPモジュールで、自分のニーズにぴったりのコードを見つけました。
my $ip = new Net::IP ('192.168.1.0 + 512');
do {
print $ip->ip(), "\n";
} while (++$ip);
NETWORKとHOSTの値が明示的に宣言されている場合、スニペットは問題なく機能します。変数を介してデータを渡すwhileループ内で使用すると、問題が発生します。何度も試した後、リストを次のように変更しました。
'192.168.150.0 + 512'
そして、これは結果のスクリプトです:
#!/usr/bin/perl
use strict;
use warnings;
use Net::IP;
open(MYFILE, "ips.txt") or die "$0: Can't open input file $input: $!\n";
while (<MYFILE>){
chomp $_;
my $ip = new Net::IP ($_);
do {
print $ip->ip(), "\n";
} while (++$ip);
}
close(MYFILE);
実行しようとすると、次のエラーが発生します。
./iplist.plの14行目1行目の未定義の値でメソッド「ip」を呼び出すことはできません。
これを使用してwhileループ内でprint $_,"\n";
変数を出力すると、変数が正しく出力されます。どこが間違っているのでしょうか。どんな助けでも大歓迎です。
UPDATE1:ips.txtのod出力
0000000 ' 4 1 . 5 7 . 1 1 6 . 0 + 1
0000020 0 2 4 ' \n ' 4 1 . 5 7 . 1 9 2 .
0000040 0 + 1 6 3 8 4 ' \n ' 4 1 . 6
0000060 6 . 1 9 2 . 0 + 1 6 3 8 4 '
0000100 \n ' 4 1 . 7 4 . 8 0 . 0 + 4
0000120 0 9 6 ' \n ' 4 1 . 7 5 . 4 8 . 0
0000140 + 4 0 9 6 ' \n ' 4 1 . 7 6 .
0000160 2 4 . 0 + 2 0 4 8 ' \n ' 4 1
0000200 . 7 7 . 6 4 . 0 + 2 0 4 8 '
0000220 \n ' 4 1 . 7 8 . 4 0 . 0 + 1
0000240 0 2 4 ' \n