2013-03-26 6 views
1

나는이 코드 조각에 대해 아무런 문제없이이 코드 조각에 머리를 부 렸습니다. 내가해야할 일은 이것의 네트워크 목록의 긴 목록에서 시작하는 IP 주소 목록을 얻는 것입니다 형식 : IP 모듈 내 요구에 완벽한 같다 :루프에서 파일의 변수 사용하기

my $ip = new Net::IP ('192.168.1.0 + 512'); 
     do { 
      print $ip->ip(), "\n"; 
     } while (++$ip); 
네트워크와

네트워크 NUMBER_OF_HOSTS
192.168.1.0 512

나는 인터넷에서 코드의 무리를 발견했습니다 HOS T 값을 명시 적으로 선언하면 조각이 완벽하게 작동합니다. 변수를 통해 데이터를 전달하는 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); 

나에게 다음과 같은 오류 :이 print $_,"\n";와 while 루프 내부의 변수를 인쇄 할 경우

Can't call method "ip" on an undefined value at ./iplist.pl line 14, line 1.

이는 V를 출력 ariable 올바르게, 그래서 내가 어디 잘못된거야? 어떤 도움을 주셔서 감사합니다.

는 갱신 1 : ips.txt

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

Nits는 제쳐두고 프로그램은 문제가 없습니다. 오류는 입력 파일에 있어야합니다. 'od -c ips.txt'의 결과는 무엇입니까? – ikegami

+0

@ikegami od 출력의 첫 번째 줄을 추가했습니다. – Diego

답변

3

문자열 리터 (즉 펄 코드) 용 OD 출력

'192.168.1.0 + 512' 

문자열을 생성

192.168.1.0 + 512 
,536,

readline (<$fh>)은 파일의 행을 생성합니다. 당신이 멀리 chomp, 그 문자열을 반환합니다

'192.168.1.0 + 512' 

이것은 여분의 따옴표가 이전 문자열과 다릅니다. 파일에서 따옴표를 제거하십시오.

+0

그게 전부입니다!, 고맙습니다 @Ikegami it worked !! – Diego