Perl模式匹配和算术运算同时进行

时间:2014-06-12 19:59:57

标签: regex perl

我可以同时进行匹配模式和算术运算吗?

   print 5 / 3 !~ /\.\d*/;

结果5,为什么?

 $str = 5 / 3;
 print $str !~ /\.\d*/;

完全正确。 我怎么能在一个表达式中做出来?

3 个答案:

答案 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更好,更快,更优雅的方法来检查这一点。