다음 .= 구문을 사용하는 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