Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 在Perl中,如果模式匹配,则执行双任务_Regex_Perl - Fatal编程技术网

Regex 在Perl中,如果模式匹配,则执行双任务

Regex 在Perl中,如果模式匹配,则执行双任务,regex,perl,Regex,Perl,我想知道我是否可以为一个模式匹配做两件不同的事情: 我正在读取一个包含以下行的文件: ( 1,<2010-01-12 15:19:51.32 +0100>,<marc>,<telescope1>, (1,,,, 我正在尝试这种策略: open(FILE, "<tmpinp.txt"); while (<FILE>){ {$expstart = timelocal($6,$5,$4,$2,($3-1),$1) &&a

我想知道我是否可以为一个模式匹配做两件不同的事情: 我正在读取一个包含以下行的文件:

(   1,<2010-01-12 15:19:51.32 +0100>,<marc>,<telescope1>,
(1,,,,
我正在尝试这种策略:

open(FILE, "<tmpinp.txt");  
while (<FILE>){
    {$expstart = timelocal($6,$5,$4,$2,($3-1),$1) && $usr=$7} if
          /.+1,<(\d{4})-(\d{2})-(\d{2})\s(\d{2}):(\d{2}):(\d{2}).*>,<(\S+)>,<(\S+)>.+\n/;
    };
close(FILE);
};
打开(文件,这个怎么样:

#!/usr/bin/perl                                                                                                                                                                                                                                                
use strict;
use warnings;
use Time::Local;

open(FILE, "<tmpinp.txt");

while (<FILE>){
    if ($_ =~ /^.+1,<(\d{4})-(\d{2})-(\d{2})\s(\d{2}):(\d{2}):(\d{2}).*?>,<(\S+)>,<(\S+)>.+$/) {
        print join(' => ', timelocal($6,$5,$4,$2,$3-1,$1), $7) . "\n";
    }
}

close(FILE);
这个怎么样:

#!/usr/bin/perl                                                                                                                                                                                                                                                
use strict;
use warnings;
use Time::Local;

open(FILE, "<tmpinp.txt");

while (<FILE>){
    if ($_ =~ /^.+1,<(\d{4})-(\d{2})-(\d{2})\s(\d{2}):(\d{2}):(\d{2}).*?>,<(\S+)>,<(\S+)>.+$/) {
        print join(' => ', timelocal($6,$5,$4,$2,$3-1,$1), $7) . "\n";
    }
}

close(FILE);

最清晰的方法是使用非后缀形式的
,如果

while (<FILE>){
   if (/.+1,<(\d{4})-(\d{2})-(\d{2})\s(\d{2}):(\d{2}):(\d{2}).*>,<(\S+)>,<(\S+)>.+\n/) {
      # this is a block; you can put as many statements in here as you want
      $expstart = timelocal($6,$5,$4,$2,($3-1),$1);
      $usr = $7;
   }
}
或者,您可以以某种深奥的方式将这两条语句组合为一条。这对于在非常紧密的循环中对条件进行微观优化非常有用。例如,您可以使用逗号运算符组合这两个赋值:

while (<FILE>){
   ($expstart = timelocal($6,$5,$4,$2,($3-1),$1)), ($usr = $7)
      if /.+1,<(\d{4})-(\d{2})-(\d{2})\s(\d{2}):(\d{2}):(\d{2}).*>,<(\S+)>,<(\S+)>.+\n/;
}
或者,如果您知道
timelocal
将始终返回一个“true”值(即不是0、空字符串或undef),您可以在尝试时使用
&

while (<FILE>){
   ($expstart = timelocal($6,$5,$4,$2,($3-1),$1)) && ($usr = $7)
      if /.+1,<(\d{4})-(\d{2})-(\d{2})\s(\d{2}):(\d{2}):(\d{2}).*>,<(\S+)>,<(\S+)>.+\n/;
}
while(){
($expstart=timelocal($6,$5,$4,$2,($3-1),$1))&($usr=$7)
如果/+1,,,。+\n/;
}

TIMTOWTDI.

最清晰的方法是使用
的非后缀形式,如果

while (<FILE>){
   if (/.+1,<(\d{4})-(\d{2})-(\d{2})\s(\d{2}):(\d{2}):(\d{2}).*>,<(\S+)>,<(\S+)>.+\n/) {
      # this is a block; you can put as many statements in here as you want
      $expstart = timelocal($6,$5,$4,$2,($3-1),$1);
      $usr = $7;
   }
}
或者,您可以以某种深奥的方式将这两条语句组合为一条。这对于在非常紧密的循环中对条件进行微观优化非常有用。例如,您可以使用逗号运算符组合这两个赋值:

while (<FILE>){
   ($expstart = timelocal($6,$5,$4,$2,($3-1),$1)), ($usr = $7)
      if /.+1,<(\d{4})-(\d{2})-(\d{2})\s(\d{2}):(\d{2}):(\d{2}).*>,<(\S+)>,<(\S+)>.+\n/;
}
或者,如果您知道
timelocal
将始终返回一个“true”值(即不是0、空字符串或undef),您可以在尝试时使用
&

while (<FILE>){
   ($expstart = timelocal($6,$5,$4,$2,($3-1),$1)) && ($usr = $7)
      if /.+1,<(\d{4})-(\d{2})-(\d{2})\s(\d{2}):(\d{2}):(\d{2}).*>,<(\S+)>,<(\S+)>.+\n/;
}
while(){
($expstart=timelocal($6,$5,$4,$2,($3-1),$1))&($usr=$7)
如果/+1,,,。+\n/;
}
蒂姆托瓦蒂