我在这段代码上撞了两天没有成功:我需要做的是从一长串网络中以这种格式获取IP地址列表:
网络 NUMBER_OF_HOSTS
192.168.1.0 512
我在 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