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 기능 을 참조하십시오.
-l
she-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
Update: my answer speaks to capability rather than advisability. I don't regard adding "\n" at the end of lines to be a "pesky" chore, but if someone really wants to avoid them, this is one way. If I had to maintain a bit of code that uses this technique, I'd probably refactor it out pronto.
In Perl 6 there is, the say
function
If you're stuck with pre-5.10, then the solutions provided above will not fully replicate the say
function. For example
sub say { print @_, "\n"; }
Will not work with invocations such as
say for @arr;
or
for (@arr) {
say;
}
... because the above function does not act on the implicit global $_
like print
and the real say
function.
To more closely replicate the perl 5.10+ say
you want this function
sub say {
if (@_) { print @_, "\n"; }
else { print $_, "\n"; }
}
Which now acts like this
my @arr = qw( alpha beta gamma );
say @arr;
# OUTPUT
# alphabetagamma
#
say for @arr;
# OUTPUT
# alpha
# beta
# gamma
#
The say
builtin in perl6 behaves a little differently. Invoking it with say @arr
or @arr.say
will not just concatenate the array items, but instead prints them separated with the list separator. To replicate this in perl5 you would do this
sub say {
if (@_) { print join($", @_) . "\n"; }
else { print $_ . "\n"; }
}
$"
is the global list separator variable, or if you're using English.pm
then is is $LIST_SEPARATOR
It will now act more like perl6, like so
say @arr;
# OUTPUT
# alpha beta gamma
#
Here's what I found at https://perldoc.perl.org/perlvar.html:
$\ The output record separator for the print operator. If defined, this value is printed after the last of print's arguments. Default is undef.
You cannot call output_record_separator() on a handle, only as a static method. See IO::Handle.
Mnemonic: you set $\ instead of adding "\n" at the end of the print. Also, it's just like $/ , but it's what you get "back" from Perl.
example:
$\ = "\n";
print "a newline will be appended to the end of this line automatically";
참고URL : https://stackoverflow.com/questions/2899367/how-can-perls-print-add-a-newline-by-default
'Programing' 카테고리의 다른 글
특정 태그가있는 Docker 이미지가 로컬에 있는지 확인하는 방법은 무엇입니까? (0) | 2020.09.11 |
---|---|
Reactjs의 새로운 react-router-dom에서 Redirect를 사용하는 방법 (0) | 2020.09.11 |
재설정을 원격 저장소에 강제로 푸시하는 방법은 무엇입니까? (0) | 2020.09.11 |
Python 패키지가 설치되어 있는지 확인 (0) | 2020.09.11 |
Java에서 Explode 및 Implode (PHP와 동일) (0) | 2020.09.11 |