Why do I get a divide-by-zero error?

I found this forum thanks to an old post on how to check whether a number is an integer:

I wrote a one-line program to try this out, with unexpected results:

perl -e 'print "Result of division is not an integer.\
" if 14/7 =~/\\D/'
Illegal division by zero at -e line 1.

Why the error? Clearly, I’m dividing by seven. Here’s a very similar one-liner that works as expected:

perl -e 'print "Fourteen divided by seven is two.\
" if 14/7 == 2'
Fourteen divided by seven is two.

Why does the first give a divide-by-zero error, while the second does not?

Thanks

Probably an operator precedence issue. I suspect your code is being interpreted like this:

if 14/(7 =~/\D/)

Your suspicion is correct.


perl -e 'print "Result of division is not an integer.\
" if (14/7) =~/\\D/'

works fine.

That said, the more standard way of testing whether a value is an integer is:


perl -e 'print "Result of division is not an integer.\
" if 14/7 != int 14/7'

The intention is clearer this way, since you’re explicitly testing whether the value is equal to the integer portion of the value instead of looking for the presence of non-numeric characters, which you could be doing for many other reasons.