구문 .= Perl에서 이는 무엇을 의미합니까?

구문 .= Perl에서 이는 무엇을 의미합니까?

다음 .= 구문을 사용하는 Perl 스크립트를 발견했습니다.

$key .= $descriptions[$i];

여기서 .=은(는) 무엇을 의미하나요?

답변1

.=C에서는 .당신이 좋아하는 것입니다.+=+

$a += 4;

처럼:

$a = $a + 4;
$a .= "x";

처럼:

$a = $a . "x";

대부분의 통신사와 동일합니다.

.자체는 문자열 연결 연산자이므로 $key .= $descriptions[$i];추가는 다음 $descriptions[$i]보다 짧고 효율적입니다.

$key = $key . $descriptions[$i];

또는

$key = "$key$descriptions[$i]";

모든 연산자와 마찬가지로 해당 설명은 다음과 같습니다 perldoc perlop.

할당 연산자

"="는 일반적인 할당 연산자입니다.

할당 연산자는 C 언어와 동일하게 작동합니다. 지금 바로,

 $x += 2;

동등하다

 $x = $x + 2;

"tie()"와 같이 lvalue 역참조로 인해 발생할 수 있는 부작용은 반복되지 않습니다. 다른 할당 연산자도 비슷하게 작동합니다. 다음이 인식됩니다.

 **=    +=    *=    &=    &.=    <<=    &&=
        -=    /=    |=    |.=    >>=    ||=
        .=    %=    ^=    ^.=           //=
              x=

이들은 가구별로 그룹화되어 있지만 모두 우선 순위가 지정되어 있습니다. 이러한 결합 할당 연산자는 스칼라에서만 작동할 수 있는 반면 일반 할당 연산자는 배열, 해시, 목록 및 참조에도 할당할 수 있습니다. (perldata의 "컨텍스트" 및 "목록 값 생성자" 및 perlref의 "참조에 할당"을 참조하세요.)

답변2

원래 코드 예제는 Perl(5)입니까, 아니면 실제로 Raku라고도 불리는 Perl6입니까?

2000년에 Perl 사람들은 현재 버전 5.6.0인 Perl 언어의 야심찬 재작성을 발표했습니다. 새 버전(Perl6)은 2015년 Rakudo 컴파일러 출시 이후 실제로 구현된 계획인 Perl5와 이전 버전과 호환되지 않을 것으로 예상됩니다. Perl6(일명 Raku)과 Perl5는 서로 다른 언어입니다.

Perl6은 2019년에 Raku로 이름이 변경되었습니다.

Perl5의 점은 .문자열 연결을 나타내지만 Perl6/Raku에서는 크게 수정되었습니다. 다른 언어와 유사하게 Perl6/Raku는 다음과 같은 표현을 어느 정도 .표현합니다.메소드 체인. 따라서 다음 Perl6/Raku 코드 문자열(말장난 의도 없음)은 .점 연산자와 함께 세 가지 방법을 사용합니다.

라쿠 REPL에서:

admin@mbp ~ % raku
Welcome to Rakudo™ v2022.07.
Implementing the Raku® Programming Language v6.d.
Built on MoarVM version 2022.07.

To exit type 'exit' or '^D'
[0] > (1..10).grep( * %% 2).reverse.put;
10 8 6 4 2

[Per6/Raku의 문자열 연결이 무엇을 의미합니까? 문자열 연결은 이제 Perl6/Raku의 Perl(5)에서와 마찬가지로 ~물결표 연산자를 통해 수행 됩니다.~=.=

어쨌든 Perl6/Raku에서는 문자열 연결과 메소드 체인이 다르기 때문에 다른 언어에서 오는 것에 대한 혼동이 적습니다.

이제 이 .=연산자에 대해:

Perl6/Raku에서는 =일반적인 할당 연산자입니다. Perl6/Raku에서 변수를 선언하려면 일반적으로 my(또는 our) 키워드를 사용합니다.

[1] > my $x = 'apple banana carrot';
apple banana carrot

선언한 후에는 1. 메서드를 호출하고 2. 다음을 사용하여 새 값을 다시 할당할 수 있습니다 .=.

[2] > $x .= uc;
APPLE BANANA CARROT

위의 코드는 다음과 동일합니다:

[2] > $x = $x.uc;
APPLE BANANA CARROT

말할 필요도 없이, 더 큰 객체(예: 배열)의 빠른 업데이트/덮어쓰기를 통해 메모리 등에서 가장 큰 절감 효과를 볼 수 있습니다.

[3] > my @array = 1..100;
[1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100]
[4] > @array.grep: *.is-prime;
(2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97)
[5] > put @array;
[1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100]

위에서 @array덮어쓸 때까지 원래 값을 유지합니다.

[6] > @array .= grep: *.is-prime;
[2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97]
[7] > put @array;
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97

http://blob.perl.org/perlweb/dev/perl6/talks/2001/dconway-Perl6.pdf
https://docs.raku.org/언어/operators#infix_.=
https://docs.raku.org/언어/operators#methodop_.=
https://raku.org

관련 정보