我目前正在调试Perl脚本并遇到一些错误,这些错误将在以下部分中介绍:
在脚本中,我将此-td
变量设计为接受类似1n, 5n, 0.3n, 0.8n
的字符串
但是当我尝试使用上述列表中的最后两个时,脚本无法按预期工作,只有在我只使用列表中的前两个时才能正常工作。
为了给你一个概述,我已经编写了脚本的一些部分,然后在代码之后,我将表明我的担忧:
if (scalar(@ARGV) < 1){ &get_usage() };
# Getoptions Setup ##
GetOptions (
'h|help' => \$help,
'v|version' => \$version,
'i|input=s' => \$input,
'o|output=s' => \$output,
... # more options here
'td=s' => \$td_val, # this is the line in question
'val=s' => \$v_var,
... # more options here
) or die get_usage(); # this will only call usage of script or help
... # more codes here
get_input_arg(); # this function will validate the entries user had inputted
#assigning to a placeholder value for creating a new file
$td_char="\ttd=$td_val" if $td_val;
$td_char=" " if !$td_val;
... # fast forward ...
sub get_input_arg{
...
# here you go, there is wrong in the following regex to accept values such as 0.8n
unless (($td_val=~/^\d+(m|u|n|p)s$/)||($td_val=~/^\d+(m|u|n|p|s)$/)||($td_val=~/^\d+$/)){#
print "\n-td error!\nEnter the required value!\n";
get_usage();
... # more functions here ...
}
解释:
-td 5n
5n
将被分配到td_val
和td_char
并稍后用于打印5n
将由get_input_arg()
函数验证,该函数将传递到正则表达式unless
行。对于5n
输入,脚本按预期工作,但是当我们使用-td 0.8n
时,在验证它之后,它将在控制台上的unless
行之后打印错误消息
我知道正则表达式无法匹配使用0.8n
作为td
输入,但我不知道如何解决它。提前谢谢!
答案 0 :(得分:-1)
您可以使用
unless (($td_val=~/^\d+(\.\d+)?[munp]s$/)||($td_val=~/^\d+(\.\d+)?[munps]$/)||($td_val=~/^\d+(\.\d+)?$/))
说明:
你的正则表达式\d+
只匹配整数..所以用\d+(\.\d+)?
替换它(整数部分后跟可选的小数部分)
请参阅DEMO