my $line ="Corner:Default,Output:fall_delay_slew_1,Mean=34.97p,Std- dev=1.767p,Min=30.02p,Max=39.71p"; #added semicolon
my $my_value="COND = Mean > 3"; #this has come from the parsed file.
$my_value =~ m/(\w+)\s*(.)\s*(\d+)/;
my $cond=$1;
my $sign=$2;
my $value=$3;
print "DEBUG:cond is $cond and sign $sign and value $value \n";
if ( $line =~ m/$cond=(.*?),/) {
if ( "$value $sign $1" ) {
print "$value is $sign than $1\n";
} else {
print "actual value is less\n";
}
}
如果你在上面看到if语句总是求值为true。
我如何解决这类问题,即$sign = "<"
(可以是任何运营商)
但是当我想将它与$value
进行比较时,我想让它作为一个
运算符而不是字符串。
答案 0 :(得分:0)
您愿意做的事情(执行字符串作为代码)可以完成
eval
。这并不意味着它是最合适的做法
它虽然。只有在您保证输入安全并检查时才这样做
它
更好的方法是检查操作员自己并确定
如何进行。如果您使用最新的Perl版本,given-when
功能可以很方便:
use feature 'switch'; # not needed if you already use 5.010 or greater
given ($sign) {
when ('<') { say "$cond less than $value" }
when ('>') { say "$cond greater than $value" }
default {
warn "unrecognized operator `$sign'\n";
# decide what to do
}
}