1

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

1 回答 1

3

字符串文字(即Perl 代码

'192.168.1.0 + 512'

产生字符串

192.168.1.0 + 512

至于readline( <$fh>),它产生文件的一行。忽略你咬掉的换行符,它返回字符串

'192.168.1.0 + 512'

这与前面的字符串不同,因为它有额外的引号。从文件中删除引号。

于 2013-03-26T11:56:41.800 回答