我正在编写一个抽象函数,它将询问用户一个给定的问题并根据给定的正则表达式验证答案。重复该问题,直到答案与验证正则表达式匹配。
但是,我还希望客户端能够指定答案是否必须区分大小写。
所以像这样:
sub ask {
my ($prompt, $validationRe, $caseSensitive) = @_;
my $modifier = ($caseSensitive) ? "" : "i";
my $ans;
my $isValid;
do {
print $prompt;
$ans = <>;
chomp($ans);
# What I want to do that doesn't work:
# $isValid = $ans =~ /$validationRe/$modifier;
# What I have to do:
$isValid = ($caseSensitive) ?
($ans =~ /$validationRe/) :
($ans =~ /$validationRe/i);
} while (!$isValid);
return $ans;
}
结果:有没有办法动态指定正则表达式的修饰符?
结果:有没有办法动态指定正则表达式的修饰符?
From perldoc perlre
:
“(?adlupimsx-imsx)”
“(?^alupimsx)”
要打开的一个或多个嵌入式模式匹配修饰符(或
对于模式的其余部分,如果前面有“-”,则关闭,或者
封闭模式组的其余部分(如果有)。
这对于动态模式特别有用,例如那些读取的
从配置文件中获取,从参数中获取,或在中指定
某处的一张桌子。考虑一些模式想要成为的情况
区分大小写,有些不区分大小写:不区分大小写的只需要
在模式的前面包含“(?i)”。
这给了你一些类似的东西
$isValid = $ans =~ m/(?$modifier)$validationRe/;
以这种方式接受用户输入时,请务必采取适当的安全预防措施。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)