我对这段代码感到头疼了两天没有任何成功: 我需要做的是从这个格式的长网络列表中获取一个IP地址列表:
NETWORK 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行的未定义值上调用方法“ip”, 第1行。
如果我使用此print $_,"\n";
在while循环中打印变量,它会正确打印变量,那么我错在哪里?任何帮助表示赞赏。
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
答案 0 :(得分:3)
字符串文字(即 Perl代码)
'192.168.1.0 + 512'
生成字符串
192.168.1.0 + 512
对于readline
(<$fh>
),它会生成一行文件。忽略你扼杀的换行符,它会返回字符串
'192.168.1.0 + 512'
这与之前的字符串的不同之处在于它有额外的引号。从文件中删除引号。