我可以同时进行匹配模式和算术运算吗?
print 5 / 3 !~ /\.\d*/;
结果5,为什么?
$str = 5 / 3;
print $str !~ /\.\d*/;
完全正确。 我怎么能在一个表达式中做出来?
答案 0 :(得分:5)
默认操作顺序为您提供意外结果。相反,尝试:
print +(5 / 3) !~ /\.\d*/;
但是,正如其他人所指出的那样,这是一种测试3分为5的可怕方法。你有模数运算符:
print 5 % 3 == 0;
答案 1 :(得分:1)
它返回5因为3 !~ /\.\d*/
返回1
而5/1 = 5`。
您可以将算术表达式包装在parens中,让Perl首先对其进行求值:
print ((5 / 3) !~ /\.\d*/);
答案 2 :(得分:0)
你只需要使用括号!
代码中发生的事情基本上是:
print 5 / (3 !~ /\.\d*/);
因此,RegEx首先出现,然后是/
部门。
我想你想做点什么:
print ((5 / 3) !~ /\.\d*/);
# or
my $division = 5 / 3;
print $division if $division !~ /\.\d*/;
# or
# print (5 / 3) if (5 / 3) !~ /\.\d*/;
# but the calculation need to be twice here!
如果我理解你的问题是正确的,你只想打印如果除法不返回浮点数:
print "test" if 5 / 3 == int 5 / 3
print "test 2" if 5 / 5 == int 5 / 5
输出:
test 2
有一种比使用RegExp更好,更快,更优雅的方法来检查这一点。