Perl正则表达式在if语句中[语法]

sno*_*kin 13 regex syntax perl

到目前为止,如果我想将几个正则表达式和if语句组合在一起,我就是这样做的:

my $data =...
if ( $data =~ m/regex/ && $data =~ m/secondregex/ ) {...}
Run Code Online (Sandbox Code Playgroud)

是否有快捷方式(我确信有,它的Perl!)以避免重复$ data,例如:

if ( $data =~ m/regex/ && m/secondregex/ ) {..}
Run Code Online (Sandbox Code Playgroud)

??

谢谢,

Unc*_*eiv 20

使用默认变量,$_如下所示:

$_ = $data;
if ( m/regex/ && m/secondregex/ ) {..}
Run Code Online (Sandbox Code Playgroud)

正则表达式$_默认处理(与Perl中的许多其他内容一样).

只需确定您不在自动填充$ _的块中,您将需要在此块中稍后使用它.一旦它被覆盖它就消失了.

  • 您可能想要本地化`$ _`:`local $ _ = $ data` (11认同)

Eug*_*ash 14

for ($data) {
    if (/regex/ && /secondregex/) {...}
}
Run Code Online (Sandbox Code Playgroud)

  • 这看起来比我明确分配到本地化的$ _更清晰 - 它类似于"with"和其他语言中的类似结构. (4认同)

Ale*_*nii 7

只有一行使用智能匹配:

use 5.010;
if ($data ~~ [qr/regex1/,qr/regex2/]) { ... }
Run Code Online (Sandbox Code Playgroud)