Perl은 두 가지 형태의 문자열 리터럴을 지원합니다 — 더블(“)과 싱글(’ 따옴표). 더블 따옴표로 된 문자열 안에서는 보간이 일어납니다: 변수와 특수 기호(예: , \t)는 그 값으로 대체됩니다. 싱글 따옴표 안에서는 보간이 없으며 — 내용이 문자 그대로 해석됩니다.
예:
my $name = "Alex"; print "Hello, $name! "; # Hello, Alex! print 'Hello, $name! '; # Hello, $name! # 표현식 보간은 중괄호를 통해 가능합니다: my $i = 10; print "i + 5 = @{[$i + 5]} "; # i + 5 = 15
@{[ ... ]}를 사용하여 안전하게 표현식의 결과를 문자열에 삽입하세요.더블 따옴표의 문자열 내에서 변수가 보간되지 않는 경우는 언제인가요?
답변: 변수가 이스케이프된 경우(\$var), 싱글 따옴표 안에 있을 때, 또는 중괄호 구문이 잘못 사용되었거나 변수 이름이 중괄호로 제한되지 않아 문자와 "붙어 버리는" 경우입니다.
my $world = 'earth'; print "Hello, $worlds! "; # 오류: $worlds라는 변수는 없고, $world + 문자 s가 결합됨
이야기
대규모 프로젝트에서 로깅을 위해 변수 문자열을 사용했습니다:
my $file = '/tmp/data'; print LOG 'File: $file
';
파일 경로를 볼 것으로 예상했지만, 로그에는 문자 그대로의 텍스트 `$file`이 남았습니다. 싱글 따옴표가 사용되었기 때문입니다. 이 문제는 프로덕션에서 실행한 후 발견되었습니다.
이야기
한 개발자가 중괄호 없이 문자열 내에 변수를 삽입했습니다:
my $user = "bob"; print "User: $user21
";
`bob21`이 출력될 것으로 예상했지만, 인터프리터는 `$user21`이라는 변수를 찾기 시작했습니다(존재하지 않았습니다). 이로 인해 보고서에 빈 값이 나타났습니다.
이야기
문자열 내에서 표현식의 결과를 표시하기 위해 다음과 같은 코드를 사용했습니다:
my $a = 3; print "Sum: $a+5
"; # 기대: 'Sum: 8', 실제: 'Sum: 3+5'
실제로, 보간은 변수만 인정하고, 표현식은 문자 그대로 삽입됩니다. `@{[ ... ]}`를 통해 작업해야 합니다.