Perl에서 이 문자 클래스는 무엇을 의미합니까?

Perl에서 이 문자 클래스는 무엇을 의미합니까?

나는 PERL을 처음 사용하고 있고(reg-ex에 대한 배경 지식은 있지만) 문자 클래스가 있는 Perl 스크립트를 살펴보고 있습니다.

$alwayssep = "[\\?!()\";/\\|‘]";

이것이 무엇을 의미하는지 설명해 줄 수 있는 사람이 있나요? 다음을 포함한 모든 문자를 의미한다는 것을 알 수 있지만 ?, !, (,),",;,/,|,'물음표와 파이프 앞에 백슬래시가 두 개 있는 이유를 이해할 수 없습니다. 일반적으로 우리는 탈출하기 위해 백슬래시를 사용합니다. Perl에서는 다른가요?

답변1

정규식을 정의하기 위해 큰따옴표 보간을 사용했기 때문에 코드가 엉망이 되었습니다.qr/.../운영자대신 사용해야합니다. 코드 정리의 일부로 보간 규칙을 파악하는 대신 정규식을 디버깅할 수 있습니다.

#!/usr/bin/env perl
use strict;
use warnings;

use re 'debugcolor';

my $blah = "[\\?!()\";/\\|‘]";

print "something\n" if "not important" =~ m/$blah/;

이 실행에서는 정규식이 로 표시되며 [\?!()%";/\|%x{e2}%x{80}%x{98}], 이상한 비트는 이것이 실제로 스마트 참조임을 %x나타냅니다 . 일부 소프트웨어가 이 코드를 깨뜨렸습니다. 기쁨! 수정 사항은 사용할 코드를 다시 작성한 qr후 다음을 사용하여 새 코드를 확인하세요 re.

#!/usr/bin/env perl
use strict;
use warnings;

use re 'debugcolor';

my $blah = qr#[?!()";/|']#;
use Data::Dumper; warn Dumper $blah;

print "something\n" if "not important" =~ m/$blah/;

정규식에 포함되어야 하는지 여부를 결정 \하고 왜 두 번 나열되는지 생각해 보겠습니다. 코드에는 단위 테스트와 문서가 포함되어 있습니다. 그렇죠?

관련 정보