让我说我这样做:
my ($a,$b,$let) = $version =~ m/^(\d+)\.(\d+)\.?([A-Za-z])?$/;
所以这将匹配例如:1.3a,1.3,... 如果let不可用,我想要$ let的默认值,比方说,默认为0。 所以1.3我会得到: $ a = 1 $ b = 3 $ let = 0
有可能吗? (来自正则表达式,不使用其他语句)
谢谢,
答案 0 :(得分:2)
这将有效 - 更新为使用按位或代替三元运算符。
my ($a,$b,$let) = ($version =~ m/^(\d+)\.(\d+)\.?([A-Za-z])?$/)
&& ($1,$2,$3 || 0 );
这是一个测试脚本
&t("1.3");
&t("1.3a");
&t("1.3.a");
sub t {
$version = shift;
my ($a,$b,$let) = ($version =~ m/^(\d+)\.(\d+)\.?([A-Za-z])?$/)
&& ($1,$2,$3 || 0 );
print "\n result $a.$b.$let";
}
输出
result 1.3.0
result 1.3.a
result 1.3.a
使用三元运算符的原始解决方案也可以使用
my ($a,$b,$let) = ($version =~ m/^(\d+)\.(\d+)\.?([A-Za-z])?$/)
&& (defined $3 ? ($1,$2,$3) : ($1,$2,0));
答案 1 :(得分:0)
$let
的默认值应为undef
。如果需要,您可以对此进行测试。