4 관련 없는 펄 정보
5770 단어 perl
<>가 True인 동안
logos.txt
라는 파일이 있다고 가정해 보겠습니다.
Onion
Camel
Raptor
그리고 같은 디렉토리에 scratch.pl
라는 프로그램이 있습니다.
open my $fh, '<', 'logos.txt' or die;
while (my $logo = <$fh>) {
print $logo;
}
close $fh;
예상대로 프로그램은 logos.txt
의 내용을 인쇄합니다.
$ perl ./scratch.pl
Onion
Camel
Raptor
내가 정말로 고려하지 않은 것은 <>
가 logos.txt
에서 빈 줄을 읽을 때 루프가 종료되지 않는 이유는 무엇입니까? <>
거짓 값인 빈 문자열을 반환하면 안 됩니까?
Programming Perl에 따르면 루프가 종료되지 않는 이유는 <>
가 줄 끝에서 줄 바꿈을 읽어서 실제로 참 값인 "\n"
를 얻기 때문입니다. 이것은 fib이며 실제 이유는 while (my $logo = <$fh>) ...
가 while (defined (my $logo = <$fh>)) ...
로 확장되고 "\n"
가 정의된 값이기 때문입니다.
B::Deparse 으로 코드를 분석하여 이를 확인할 수 있습니다.
$ perl -MO=Deparse,-p,-sCi2 -ne 42
LINE: while (defined(($_ = readline(ARGV)))) {
'???';
}
-e syntax OK
Heredocs는 셸 명령을 실행할 수 있습니다.
대부분의 Perl 프로그래머는 heredocs 종료 문자열을 작은따옴표로 묶으면 변수 보간을 방지한다는 것을 알고 있습니다.
my $var = 12;
print <<'EOS';
Hello
$var = 12
EOS
프로그램 출력에서 $var
가 보간되지 않은 것을 볼 수 있습니다.
$ perl ./scratch.pl
Hello
$var = 12
그러나 종료 문자열을 역따옴표로 묶으면 각 줄이 쉘 명령으로 실행된다는 사실을 알고 계셨습니까?
print <<`EOC`;
echo this is a shell command
echo this is also a shell command
EOC
이 프로그램을 실행하면 echo 명령이 실행되었음을 알 수 있습니다.
$ perl ./scratch.pl
this is a shell command
this is also a shell command
쉼표 연산자
나는 항상 쉼표를 당연하게 여겼고 그것이 실제로 연산자라는 것을 결코 깨닫지 못했습니다.
스칼라 컨텍스트에서 평가할 때 목록이 마지막 요소를 반환하는 이유가 궁금한 적이 있습니까? 쉼표 연산자 때문인 것으로 나타났습니다.
스칼라 컨텍스트에서 쉼표 연산자 ","는 첫 번째 인수를 무시하고 스칼라 컨텍스트에서 평가된 두 번째 요소를 반환합니다.
이는 스칼라 컨텍스트에서 목록(11, 22, 33)
이 33으로 평가됨을 의미합니다. 첫 번째 쉼표 연산자는 11을 버리고 스칼라 컨텍스트에서 평가된 (22, 33)
를 반환합니다. 이 값은 22를 버리고 33을 반환하여 평가됩니다.
자동 증가 문자열
Perl에서는 숫자뿐만 아니라 문자열도 자동 증가할 수 있습니다. 문자열을 증가시키려면 정규식/^[a-zA-Z]*[0-9]*\z/
과 일치해야 합니다.
단일 알파벳 문자열은 직관적으로 증가합니다.
$ perl -E 'my $v = "a"; say ++$v'
b
$ perl -E 'my $v = "B"; say ++$v'
C
영숫자가 아닌 문자를 증가시키면 어떻게 됩니까? 다음 ASCII 문자를 제공합니까? 증가할 때 영숫자가 아닌 문자는 0으로 처리됩니다. 다행스럽게도 warnings을 사용하면 Perl이 알려줄 것입니다.
$ perl -W -E 'my $v = "-"; say ++$v'
Argument "-" treated as 0 in increment (++) at -e line 1.
1
알파벳의 끝에 있는 z
를 증가시키면 어떻게 될까요? a
로 다시 돌아갑니까? 이것은 일이 흥미로워지는 곳입니다. Perl은 일반 숫자 시스템에서처럼 문자열을 증가시킵니다. stringimal의 십진수9 + 1 = 10
의 z + 1 = aa
와 같습니다.
$ perl -E 'my $v = "z"; say ++$v'
aa
다음은 문자열 자동 증가의 마법을 보여주는 몇 가지 예입니다.
$ perl -W -E 'my $v1 = "foo"; say ++$v1'
fop
$ perl -W -E 'my $v1 = "az"; say ++$v1'
ba
$ perl -W -E 'my $v1 = "a9"; say ++$v1'
b0
Reference
이 문제에 관하여(4 관련 없는 펄 정보), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/nicholasbhubbard/4-unrelated-perl-tidbits-2766
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Onion
Camel
Raptor
open my $fh, '<', 'logos.txt' or die;
while (my $logo = <$fh>) {
print $logo;
}
close $fh;
$ perl ./scratch.pl
Onion
Camel
Raptor
$ perl -MO=Deparse,-p,-sCi2 -ne 42
LINE: while (defined(($_ = readline(ARGV)))) {
'???';
}
-e syntax OK
대부분의 Perl 프로그래머는 heredocs 종료 문자열을 작은따옴표로 묶으면 변수 보간을 방지한다는 것을 알고 있습니다.
my $var = 12;
print <<'EOS';
Hello
$var = 12
EOS
프로그램 출력에서
$var
가 보간되지 않은 것을 볼 수 있습니다.$ perl ./scratch.pl
Hello
$var = 12
그러나 종료 문자열을 역따옴표로 묶으면 각 줄이 쉘 명령으로 실행된다는 사실을 알고 계셨습니까?
print <<`EOC`;
echo this is a shell command
echo this is also a shell command
EOC
이 프로그램을 실행하면 echo 명령이 실행되었음을 알 수 있습니다.
$ perl ./scratch.pl
this is a shell command
this is also a shell command
쉼표 연산자
나는 항상 쉼표를 당연하게 여겼고 그것이 실제로 연산자라는 것을 결코 깨닫지 못했습니다.
스칼라 컨텍스트에서 평가할 때 목록이 마지막 요소를 반환하는 이유가 궁금한 적이 있습니까? 쉼표 연산자 때문인 것으로 나타났습니다.
스칼라 컨텍스트에서 쉼표 연산자 ","는 첫 번째 인수를 무시하고 스칼라 컨텍스트에서 평가된 두 번째 요소를 반환합니다.
이는 스칼라 컨텍스트에서 목록(11, 22, 33)
이 33으로 평가됨을 의미합니다. 첫 번째 쉼표 연산자는 11을 버리고 스칼라 컨텍스트에서 평가된 (22, 33)
를 반환합니다. 이 값은 22를 버리고 33을 반환하여 평가됩니다.
자동 증가 문자열
Perl에서는 숫자뿐만 아니라 문자열도 자동 증가할 수 있습니다. 문자열을 증가시키려면 정규식/^[a-zA-Z]*[0-9]*\z/
과 일치해야 합니다.
단일 알파벳 문자열은 직관적으로 증가합니다.
$ perl -E 'my $v = "a"; say ++$v'
b
$ perl -E 'my $v = "B"; say ++$v'
C
영숫자가 아닌 문자를 증가시키면 어떻게 됩니까? 다음 ASCII 문자를 제공합니까? 증가할 때 영숫자가 아닌 문자는 0으로 처리됩니다. 다행스럽게도 warnings을 사용하면 Perl이 알려줄 것입니다.
$ perl -W -E 'my $v = "-"; say ++$v'
Argument "-" treated as 0 in increment (++) at -e line 1.
1
알파벳의 끝에 있는 z
를 증가시키면 어떻게 될까요? a
로 다시 돌아갑니까? 이것은 일이 흥미로워지는 곳입니다. Perl은 일반 숫자 시스템에서처럼 문자열을 증가시킵니다. stringimal의 십진수9 + 1 = 10
의 z + 1 = aa
와 같습니다.
$ perl -E 'my $v = "z"; say ++$v'
aa
다음은 문자열 자동 증가의 마법을 보여주는 몇 가지 예입니다.
$ perl -W -E 'my $v1 = "foo"; say ++$v1'
fop
$ perl -W -E 'my $v1 = "az"; say ++$v1'
ba
$ perl -W -E 'my $v1 = "a9"; say ++$v1'
b0
Reference
이 문제에 관하여(4 관련 없는 펄 정보), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/nicholasbhubbard/4-unrelated-perl-tidbits-2766
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Perl에서는 숫자뿐만 아니라 문자열도 자동 증가할 수 있습니다. 문자열을 증가시키려면 정규식
/^[a-zA-Z]*[0-9]*\z/
과 일치해야 합니다.단일 알파벳 문자열은 직관적으로 증가합니다.
$ perl -E 'my $v = "a"; say ++$v'
b
$ perl -E 'my $v = "B"; say ++$v'
C
영숫자가 아닌 문자를 증가시키면 어떻게 됩니까? 다음 ASCII 문자를 제공합니까? 증가할 때 영숫자가 아닌 문자는 0으로 처리됩니다. 다행스럽게도 warnings을 사용하면 Perl이 알려줄 것입니다.
$ perl -W -E 'my $v = "-"; say ++$v'
Argument "-" treated as 0 in increment (++) at -e line 1.
1
알파벳의 끝에 있는
z
를 증가시키면 어떻게 될까요? a
로 다시 돌아갑니까? 이것은 일이 흥미로워지는 곳입니다. Perl은 일반 숫자 시스템에서처럼 문자열을 증가시킵니다. stringimal의 십진수9 + 1 = 10
의 z + 1 = aa
와 같습니다.$ perl -E 'my $v = "z"; say ++$v'
aa
다음은 문자열 자동 증가의 마법을 보여주는 몇 가지 예입니다.
$ perl -W -E 'my $v1 = "foo"; say ++$v1'
fop
$ perl -W -E 'my $v1 = "az"; say ++$v1'
ba
$ perl -W -E 'my $v1 = "a9"; say ++$v1'
b0
Reference
이 문제에 관하여(4 관련 없는 펄 정보), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/nicholasbhubbard/4-unrelated-perl-tidbits-2766텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)