使用循环中文件的变量

时间:2013-03-26 11:16:54

标签: perl

我对这段代码感到头疼了两天没有任何成功: 我需要做的是从这个格式的长网络列表中获取一个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   

1 个答案:

答案 0 :(得分:3)

字符串文字(即 Perl代码

'192.168.1.0 + 512'

生成字符串

192.168.1.0 + 512

对于readline<$fh>),它会生成一行文件。忽略你扼杀的换行符,它会返回字符串

'192.168.1.0 + 512'

这与之前的字符串的不同之处在于它有额外的引号。从文件中删除引号。