如何在Perl中迭代正则表达式匹配变量?

EMi*_*ler 5 regex perl reference

我有一个很长的正则表达式,可以将文本文件解析为各种匹配变量.

对于稳健性,匹配变量可能包含空格.我想通过迭代匹配变量以系统的方式删除空格.

例如,我有比赛的变量$2通过$14包含一些空白.

我可以:

my @columns = my ($serNum, $helixID, $initResName, $initChainID,
$initSeqNum, $initIcode, $endResName, $endChainID, $endSeqNum,
$endICode, $helixClass, $comment, $length) = 
($2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14);

### Remove whitespace                       
foreach my $element (0..$#columns) {
    $columns[$element] =~ s/^\s+//;
    $columns[$element] =~ s/\s+$//;
}
Run Code Online (Sandbox Code Playgroud)

但是,这不仅能消除在元素的空白@column,并留下正确命名标量,$serNum,$helixID,等不变.

有没有办法在将每个匹配变量复制到更好命名的标量之前删除每个匹配变量中的空白区域,或者有没有办法迭代这些命名良好的标量本身并从那里删除空格?

我认为可能有一些方法可以用引用来做到这一点.

Eug*_*ash 4

您可以先将匹配变量存储在数组中,然后使用映射去除空格:

my @matches = ($2, $3, $4, ...);

my ($serNum, $helixID, ...) 
  = map { (my $v = $_) =~ s/^\s+|\s+$//g; $v } @matches;
Run Code Online (Sandbox Code Playgroud)