수색…


비고

버전 구문을 사용하면 아직 존재하지 않는 버전을 보호 할 수 없기 때문에 누군가가 돌아가서 수정 한 것을 기억해야합니다 (RE : Perl 5.26). 버전 경비원은 소스 체크 아웃을 수행 할 정도로 용감한 사람들이 사용할 수있는 임시 기능에 대한 "미래"분류가 필요합니다.

문자열 상 인용 부호

문자열 리터럴은 이스케이프 또는 보간을 의미하지 않습니다 (문자열 종결자를 인용 제외).

print 'This is a string literal\n'; # emits a literal \ and n to terminal

print 'This literal contains a \'postraphe '; # emits the ' but not its preceding \

충돌을 피하기 위해 다른 인용 메커니즘을 사용할 수 있습니다.

print q/This is is a literal \' <-- 2 characters /;  # prints both \ and '
print q^This is is a literal \' <-- 2 characters ^;  # also

특정 선택된 인용 문자는 "균형 잡힌"

print q{ This is a literal and I contain { parens! } }; # prints inner { }

큰 따옴표

큰 따옴표로 묶인 문자열은 작은 따옴표로 묶인 문자열과 달리 보간이스케이프를 사용합니다. 문자열을 큰 따옴표로 묶으려면 큰 따옴표 또는 " qq " 연산자를 사용하십시오.

my $greeting = "Hello!\n";
print $greeting;
# => Hello! (followed by a linefeed)

my $bush = "They misunderestimated me."
print qq/As Bush once said: "$bush"\n/;
# => As Bush once said: "They misunderestimated me." (with linefeed)

qq 는 따옴표를 벗어나는 것을 피하기 위해 여기에서 유용합니다. 그것이 없으면 우리는 다음과 같이 작성해야합니다.

print "As Bush once said: \"$bush\"\n";

... 그냥 좋지는 않아.

Perl은 / qq 와 함께 슬래시를 사용하는 것을 제한하지 않습니다. 어떤 (보이는) 문자를 사용할 수 있습니다.

use feature 'say';

say qq/You can use slashes.../;
say qq{...or braces...};
say qq^...or hats...^;
say qq|...or pipes...|;
# say qq ...but not whitespace. ;

배열을 문자열로 삽입 할 수도 있습니다.

use feature 'say';

my @letters = ('a', 'b', 'c');
say "I like these letters: @letters.";
# => I like these letters: a b c.

기본적으로 값은 공백으로 구분됩니다. 특수 변수 $" 가 단일 공백으로 설정되어 있기 때문입니다. 물론 변경할 수 있습니다.

use feature 'say';

my @letters = ('a', 'b', 'c');
{local $" = ", "; say "@letters"; }    # a, b, c

원하는 경우 use Englishuse English 하고 $LIST_SEPARATOR 대신 변경할 수 있습니다.

use v5.18; # English should be avoided on older Perls
use English;

my @letters = ('a', 'b', 'c');
{ local $LIST_SEPARATOR = "\n"; say "My favourite letters:\n\n@letters" }

이보다 더 복잡한 경우에는 대신 루프를 사용해야합니다.

say "My favourite letters:";
say;
for my $letter (@letters) {
  say " - $letter";
}

보간은 해시와 작동하지 않습니다 .

use feature 'say';

my %hash = ('a', 'b', 'c', 'd');
say "This doesn't work: %hash"         # This doesn't work: %hash

일부 코드는 참조 삽입을 남용 합니다 . 이를 피하십시오 .

use feature 'say';

say "2 + 2 == @{[ 2 + 2 ]}";           # 2 + 2 = 4 (avoid this)
say "2 + 2 == ${\( 2 + 2 )}";          # 2 + 2 = 4 (avoid this)

소위 "카트 연산자"간접 참조 펄 발생 @{ ... } 배열 문헌 [ ... ] ,는 보간하고자하는 식을 포함 2 + 2 . 이 트릭을 사용하면 Perl은 익명의 배열을 만든 다음 역 참조하고이를 버립니다.

${\( ... )} 버전은 다소 낭비가 적지 만 여전히 메모리를 할당해야하며 읽기가 더 어렵습니다.

대신 다음을 작성하는 것이 좋습니다.

  • say "2 + 2 == " . 2 + 2;
  • my $result = 2 + 2; say "2 + 2 == $result"

헤레 도크

대형 멀티 라인 문자열은 쓰기가 부담 스럽습니다.

my $variable = <<'EOF';
this block of text is interpreted literally,
no \'quotes matter, they're just text
only the trailing left-aligned EOF matters.
EOF

주의 : 스택 오버 플로우 구문 하이 라이터를 무시하십시오. 이것은 매우 잘못되었습니다.

그리고 보간 Heredocs도 같은 방식으로 작동합니다.

my $variable = <<"I Want it to End";
this block of text is interpreted.
quotes\nare interpreted, and $interpolations
get interpolated... 
but still, left-aligned "I Want it to End" matters.
I Want it to End

5.26.0 *에서 보류중인 것은 "들여 쓰기 된 Heredoc"구문으로, 왼쪽 패딩을 줄입니다.

5.26.0
my $variable = <<~"MuchNicer";
    this block of text is interpreted.
    quotes\nare interpreted, and $interpolations
    get interpolated... 
    but still, left-aligned "I Want it to End" matters.
MuchNicer

후미 줄 바꾸기

chomp 함수는 전달 된 각 스칼라에서 하나의 개행 문자가 있으면 제거합니다. chomp 는 원래 문자열을 변경하고 제거 된 문자 수를 반환합니다.

my $str = "Hello World\n\n";
my $removed = chomp($str);
print $str;     # "Hello World\n"
print $removed; # 1    

# chomp again, removing another newline
$removed = chomp $str;
print $str;     # "Hello World"
print $removed; # 1    

# chomp again, but no newline to remove
$removed = chomp $str;
print $str;     # "Hello World"
print $removed; # 0    

한 번에 둘 이상의 문자열을 chomp 할 수도 있습니다.

my @strs = ("Hello\n", "World!\n\n"); # one newline in first string, two in second

my $removed = chomp(@strs); # @strs is now  ("Hello", "World!\n")
print $removed;             # 2

$removed = chomp(@strs); # @strs is now ("Hello", "World!")
print $removed;          # 1  

$removed = chomp(@strs); # @strs is still ("Hello", "World!")
print $removed;          # 0

그러나 일반적으로 아무도 제거 된 뉴 라인의 개수에 대해 걱정하지 않으므로 chomp 는 일반적으로 무효 상황에서 볼 수 있으며 대개 파일에서 행을 읽음으로써 발생합니다.

while (my $line = readline $fh)
{
    chomp $line;

    # now do something with $line
}

my @lines = readline $fh2;

chomp (@lines); # remove newline from end of each line


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow