[perl] Perl의 프린트는 어떻게 기본적으로 개행을 추가 할 수 있습니까?

Perl에서 대부분의 print진술은 다음과 같은 형식을 취합니다.

print "hello." . "\n";

모든 성가신 “\ n”를 주변에 두지 않는 좋은 방법이 있습니까?

myprint자동으로 \ n을 추가하는 것과 같은 새 함수를 만들 수 있다는 것을 알고 있지만 기존 print.



답변

펄 6 갖는 say자동 추가 기능 \n.

say다음을 추가하면 Perl 5.10 또는 5.12 에서도 사용할 수 있습니다.

use feature qw(say);

프로그램 시작 부분까지. 또는 Modern :: Perl 을 사용 하여이 기능과 기타 기능을 얻을 수 있습니다.

자세한 내용은 perldoc 기능 을 참조하십시오.


답변

-lshe-bang 헤더 의 옵션을 사용할 수 있습니다 .

#!/usr/bin/perl -l

$text = "hello";

print $text;
print $text;

산출:

hello
hello


답변

Perl 5.10+가 옵션이 아닌 경우 여기에 빠르고 더러운 근사치가 있습니다. say 첫 번째 인수가 핸들 일 때 약간의 마법이 있기 때문에 정확히 동일하지는 않지만 STDOUT에 인쇄하기위한 것입니다.

sub say {print @_, "\n"}

say 'hello';


답변

print 문을 작성하는 방식은 불필요하게 장황합니다. 개행을 자체 문자열로 분리 할 필요가 없습니다. 이것으로 충분합니다.

print "hello.\n";

이러한 인식은 일반적으로 코딩을 더 쉽게 만들 것입니다.

use feature "say"또는 use 5.10.0또는 use Modern::Perl내장 say기능 을 사용하는 것 외에도 기본적 으로 많은 현명한 누락 된 Perl 5 기능을 켜는 pimp perl5i 를 사용 하겠습니다 .


답변

다음을 사용하여 출력 레코드 구분 기호를 줄 바꿈으로 변경하려고 할 수 있습니다.

local $\ = "\n";

$ perl -e 'print q{hello};print q{goodbye}' | od -c
0000000    h   e   l   l   o   g   o   o   d   b   y   e
0000014
$ perl -e '$\ = qq{\n}; print q{hello};print q{goodbye}' | od -c
0000000    h   e   l   l   o  \n   g   o   o   d   b   y   e  \n
0000016

업데이트 : 내 대답은 권고보다는 능력에 관한 것입니다. 줄 끝에 “\ n”을 추가하는 것이 “성가신”잡일이라고 생각하지 않지만 누군가가 정말로 그것을 피하고 싶다면 이것은 한 가지 방법입니다. 이 기술을 사용하는 약간의 코드를 유지해야한다면 아마도 리팩토링 할 것입니다.


답변

https://perldoc.perl.org/perlvar.html 에서 찾은 내용은 다음과 같습니다 .

$ \ 인쇄 연산자의 출력 레코드 구분 기호입니다. 정의 된 경우이 값은 마지막 인쇄 인수 다음에 인쇄됩니다. 기본값은 undef입니다.

핸들에서 output_record_separator ()를 호출 할 수 없으며 정적 메서드로만 호출 할 수 있습니다. IO :: Handle을 참조하십시오.

니모닉 : 인쇄 끝에 “\ n”을 추가하는 대신 $ \를 설정합니다. 또한 $ /와 비슷하지만 Perl에서 “돌아온”것입니다.

예:

$\ = "\n";
print "a newline will be appended to the end of this line automatically";


답변

Perl 6에는 다음과 같은 say기능이 있습니다.