通常,当我检查正则表达式是否成功时,我会这样做
if ($var =~ /aaa(\d+)bbb(\d+)/) { # $1 and $2 should be defined now }
但我记得看到这种变体的接缝更短。也许它只有一个缓冲区。
$1
在成功的正则表达式之后,任何人都可以思考或其他方法来测试吗?
您可以完全避免 1 美元和类似的费用:
if (my ($anum, $bnum) = $var =~ /aaa(\d+)bbb(\d+)/) {
# Work with $anum and $bnum
}
我能想到的唯一更短的方法是匹配是否在 $_ 上。例如:
for (@strings) {
if (m/aaa(\d+)bbb(\d+)/) {
...
如果匹配成功,则将填充 $1 和 $2。
永远不要忘记
use strict;
use warnings;
我喜欢 Perl 中的简单语法,但不是这样:
my $str = 'abc101abc';
$str =~ m/(\d+)/ and do {print $1;}
或者
$str =~ m/(\d+)/ and print $1;
或者
($str in $_, so $_ = $str;)
m/(\d+)/ and print $1;
但!TIMTOWTDI
帮助您梦想自己的风格:)
我更喜欢老式风格。
阅读这两个答案,我现在记得这是我所看到的
my $str = 'abc101abc';
$str =~ m/(\d+)/;
print $1 if $1;
print $1 if $str =~ m/(\d+)/;