我正在尝试执行一个简单的检查以查看字符串是否包含“%”,但每当我执行我的代码时,无论字符串中的内容是什么,它都会将if语句评估为false。我的代码如下所示:
if ($end_time =~ m{%%}) {
($percentage) = $end_time =~ m/=([^%%]*)%%/g;
$percentage = sprintf("%s%%", $percentage);
$end_time = "";
}
elsif ($duration =~ m/(overdue)/) {
$percentage = "$end_time $duration";
$end_time = "";
}
else {
$percentage = "100%";
}
和$ end_time的期望值,替换你喜欢的任何数值。
"5%" or "==30%" or "+3m:26s overdue" or "13:48:40"
因此,如果$ end_time包含“过期”或“%”百分比将为100%,$ end_time将是检查前的任何内容。我明白为什么我得到了我得到的结果,而不是我的if语句总是评估为假的原因。
答案 0 :(得分:5)
字符串文字和正则表达式文字用\
转义,而不是加倍,%
也不需要转义。
if ($end_time =~ m{%}) {
($percentage) = $end_time =~ m/=([^%]*)%/g;
$percentage = sprintf("%s%%", $percentage);
$end_time = "";
sprintf
使用加倍%
的字符串来表示%
,但这与构建字符串和正则表达式模式无关。
答案 1 :(得分:3)
您还可以使用index()