문제

내가 쓸 때

#!/usr/bin/perl -w
use strict;

while( <DATA> ) {
    print "\n-------------------------\n\n";
    print;
    <>;
}

각 "반환"후 한 줄이됩니다.

각 "반환"한 단락 후에 다음 스크립트를 사용하지 않는 이유는 무엇입니까?

#!/usr/bin/perl -w
use strict;

local $/ = "";

while( <DATA> ) {
    print "\n-------------------------\n\n";
    print;
    <>;
}

__DATA__
line one
line two
line three
line four
line five

line six
line seven
line eigth
line nine

line ten
line eleven
line twelve
도움이 되었습니까?

해결책

첫 번째 스크립트에서 $/ 변수가 기본 " n"으로 설정된u003CDATA> 한 번에 한 줄만 반환합니다.

나는 두 번째 스크립트가 당신이 원하는 것을한다고 믿는다. 단지 <>는 '반환'에서 읽기를 종료하지 않고 오히려u003Cctrl-d> 당신의 $/ 설정으로 인해 (다른 사람이 지적했듯이 <>는 stdin에서 읽었지만 이미 그것을 알고 있으며 출력을 규제하는 데 사용하고 있다고 생각합니다).

'반환'으로 출력을 실제로 규제하려면 루프에서 $/로 더 많은 작업을 수행해야합니다.

while( <DATA> ) {
    print "\n-------------------------\n\n";
    print;
    $/ = "\n"; # default so that the following terminates the read on 'return'
    <>;
    $/ = ""; 
}   

다른 팁

나는 당신 이이 라인을 기대하고 있다고 생각합니다

local $/ = "";

행동을 바꾸려면

<DATA>

데이터가 끝날 때까지 계속 읽습니다.

그러나 사실 그것은 이와 같은 것을 필요로합니다

{
    local $/;  # $/ becomes undef in this block
    ...
}

사용하려면 슬러프 모드 (그리고 {curlys} 내부의 범위에 해당 모드를 포함).

사실상 그것은 "새로운 노 라인을 녹음 끝 마커로 생각하는 것을 잊어 버립니다"라고 말하고 있습니다.

그 외에 ... a 넥타이 전투기 코드에서!

while( <DATA> ) {
    print "\n-------------------------\n\n";
    print;
    <>;    # <-- Feel the power of the DARK SIDE!!!
}

이 작은 사람은 데이터가 아닌 Stdin에서 읽을 것입니다. 실제로 원하는 것입니까?

단락 모드에서 그 방식 (대화식으로)을 사용하는 것은 혼란 스러울 것입니다. "반환"을 누르면 돌아 오지 않습니다. 대신, 비 빈 줄 (단락의 시작)이 될 때까지 읽은 다음 빈 줄 (해당 단락의 끝)이 될 때까지 읽은 다음 비어 있지 않은 선 (시작이 시작될 때까지 계속 읽습니다. 다음 단락 중에서 - 버퍼링되고 반환되지 않음) 추가 빈 줄이 버려 졌다는 것을 알고 있습니다.

아마도 당신은 다음을 사용해야 할 것입니다.

local $/ = "\n"; <>

대신 루프가 끝날 때. 또는 posix :: getchar () 일 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top