我仍然是一个perl noob。我得到一个字符串,可以是man_1,man_2,woman1,woman2等。(没有逗号,只有一个字符串作为函数的输入)。
我需要在if语句中检查man_或woman作为子字符串,以确保提取适当的数字并添加一些偏移量。
我可以提取的数字如下
$num =~ s/\D//g
if (<need the substring extracted> == "man_")
$offset = 100;
else if (<need the substring extracted> == "woman")
$offset = 10;
return $num + $offset;
现在我如何提取子字符串。我查看了substr,它需要抵消,什么不是。无法弄清楚。感谢帮助
答案 0 :(得分:0)
解决方案:
if ( $num =~ m{^man_(\d+)$} ) {
return 100 + $1;
} elsif ( $num =~ m{^woman(\d+)$} ) {
return 10 + $1;
} else {
die "Bad input: $num\n";
}
在您的示例中,存在几个问题:
答案 1 :(得分:0)
depesz有一个很好的解决方案。这是另一个:
my %offsets = (
'man_' => 100,
'woman' => 10,
);
my ($prefix, $num) = $str =~ /^(\D+)(\d+)\z/
or die;
my $offset = $offsets{$prefix}
or die;
return $num + $offset;
答案 2 :(得分:0)
另一种选择:
return $2 + ( $1 eq 'man_' ? 100 : 10 )
if $num =~ /^(man_|woman)(\d+)\z/;
die;