2012-10-06 4 views
1

나는 이것으로 충분할 것이라고 생각했다. 나는 두 개의 배열을 가지고 있으며,이 배열의 숫자가있는 문장을 파일로 출력하려고합니다.Perl 인쇄 함수가 변수에 원하지 않는 개행을 추가 함

Number1: 0 
& Number2: 87.3 
Some Words 

(여기서 숫자는 단지 예입니다.)

이런 일이 왜 어떤 생각을 :

chomp $array1[$x]; 
chomp $array2[$x]; 
print FILE "Number1: $array1[$x] \& Number2: $array2[$x] Some Words\n"; 

저를주는 : 나는이 시도? 사용해 보았습니다.

$array1[$x] =~ s/\n//g; 
$array2[$x] =~ s/\n//g; 

도 있지만 문제가 해결되지 않았습니다. 내가 명시 적으로처럼, 이러한 여분의 줄 바꿈을 배치하면 또한, :

print FILE "Number1: $array1[$x]\n \& Number2: $array2[$x]\n Some Words\n" 

을 나는 같은 출력을 얻을, 그래서 원하지 않는 줄 바꿈 더 이상 추가되지 않습니다. 왜?

+0

어떻게'$ array [1]'과'$ array [2]'가 채워지는지 알아야합니다. "열린"모양은 무엇입니까 (파일을 읽는 경우). 파일이 생성 된 운영 체제는 무엇입니까? 어떤 운영 체제를 사용하고 있습니까? – DavidO

+0

작은 따옴표를 사용하여 인쇄하지 않는 한'&'를 이스케이프 할 필요가 없습니다. – squiguy

+0

@DavidO 파일은 Windows에서 생성되었으며 스크립트는 Linux에서 실행됩니다. 파일을 읽음으로써 채워진 다른 배열 (원시)을 정렬하여 배열을 채 웁니다. 각 행은 '원시'로 읽기 전에 '섞여서'나왔다. – CybeatB

답변

0

파일이 Windows에서 생성되었으므로 LF이 아닌 CRLF (즉 \r\n) 줄 종결이있을 수 있습니다. chomp은 기본적으로 LF 만 제거합니다.

이 선은 선택적CR 이전에 LF 제거 것이다

$array1[$x] =~ s/\r?\n//; 

대안 가리킨 chomp 올바르게 모두를 제거해야하는 \r\n를 포함 $/ (디폴트 "입력 레코드 분리")를 변경.

+3

'\ R'은 Perl 5.10에서 라인 어미를 제거하기 위해 도입되었습니다. 정규식이하는 일을 정확하게 수행합니다. – squiguy