1

私はこのコードに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   
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 に答える