Perlでは、この文字クラスはどういう意味ですか?

Perlでは、この文字クラスはどういう意味ですか?

私は最初にPERLを使用していて(reg-exの背景知識はありますが)、文字クラスを持つPerlスクリプトを見ています。

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

これが何を意味するのかを説明できる人はいますか?以下を含むすべての文字を意味することがわかりますが、?, !, (,),",;,/,|,'疑問符とパイプの前にバックスラッシュが2つある理由は理解できません。通常、私たちは逃げるためにバックスラッシュを使用します。 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/;

正規表現に含めるべきかどうかを決定し\、なぜ2回リストされているのかを考えてみましょう。コードにはユニットテストとドキュメントが含まれています。そうですか?

関連情報