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/;

我将让您决定是否\应该成为正则表达式的一部分,并思考为什么它似乎被列出了两次。该代码有单元测试和文档,对吧?

相关内容