![DIY](https://linux55.com/image/126465/DIY.png)
나는 이 두 줄을 발견했고, 그들이 무엇을 하는지 알아내려고 노력했지만, 그것이 코드에서 무엇을 의미하는지 여전히 의심스럽습니다. 내가 말하는 코드는 다음과 같습니다.
my $mapped_from = ($num_phones_in == 60)? = $1 : $2;
my $mapped_to = ($num_phones_out == 48)? = $2 : $3;
괄호 뒤의 물음표가 있는 변수()가 무엇을 하는지 잘 모르겠습니다. 그리고 달러 기호(변수)가 있고 콜론으로 구분된 두 숫자가 무엇을 의미하는지 모르겠습니다.
코드에 대한 자세한 내용을 제공하기 위해 이 부분에서는 다음과 같은 파일을 사용합니다.
ah X /
au u aU
열에는 각각 60, 48, 39개의 행이 있습니다. 누군가 나에게 단서를 줄 수 있다면 나는 약간 길을 잃었기 때문에 정말 감사하겠습니다.
답변1
my $mapped_from = ($num_phones_in == 60)? = $1 : $2;
구문 오류입니다. test ? val_true : val_false
예"삼항 연산자", 문의 인라인 형식입니다 if-else
. true 이면 test
이 val_true
부분이 계산되고, test
false이면 이 val_false
부분이 계산됩니다. 물음표는 괄호와 관련이 없습니다. 그러나 이는 = $1
올바른 표현이 아닙니다.
=
추가 항목 이 없으면 60 ($num_phones_in == 60)? $1 : $2;
인지 확인 하고 $num_phones_in
그에 따라 $1
OR를 반환합니다 $2
.
$1
및 $2
(등)은 이전 정규식에서 캡처링 그룹의 내용을 참조하는 변수입니다. 그렇게 하면 "afoob" =~ /a(.*)b/
해당 내용이 $1
포함됩니다 foo
. 바라보다perlvar의 정규식 관련 변수.
답변2
삼항 연산자 라고 ? :
하며 현대 언어에서 가장 많이 남용되는 연산자 중 하나라고 합니다. (특히 중첩된 삼항 연산자입니다.) 다음 두 줄은 동일합니다.
$value = ($a > 9) ? 10 : 0;
if ($a > 9) { $value = 10 } else { $value = 0 };
$1
또한 $2
최신 정규 표현식의 대괄호 일치 결과에 대해서도 질문하고 계십니다 . 예를 들어,
$a = 'Hello world. 1+2 is 3';
$a =~ /(\w+).*?(\d+)/;
print "1=$1, 2=$2\n";. # "1=Hello, 2=1"
답변3
DIY
메타 답변: 스스로 알아보세요.
Perl에는 매우 멋진 디버깅 모드가 있습니다. 다음과 같이 입력할 수 있습니다.
perl -de1
(이것은 -d
(디버그 모드) 및 (문 "1" 실행) -e 1
에 대한 편리한 단축키 일 뿐이며 최소한의 문자를 입력할 수 있다는 이점이 있는 간단한 무작동입니다.)
그러면 즉시 실행될 Perl 코드를 입력할 수 있는 디버거를 사용하라는 메시지가 표시됩니다. 이 시도:
$num_phones_in = 10;
my $mapped_from = ($num_phones_in == 60)? = $1 : $2;
즉시 구문 오류가 발생합니다. 두 번째는 =
떠나야합니다. 가독성을 높이기 위해 연산자에서 모든 공백을 제거하거나 ?:
원하는 대로 공백을 추가할 수 있습니다. Perl은 신경 쓰지 않지만 동료들은 신경쓰고 있습니다.
my $mapped_from = ($num_phones_in == 60)?$1:$2;
my $mapped_from = ($num_phones_in == 60) ? $1 : $2;