in reply to Can you spot the problem?

8.7.whatever because ("8" | "7") eq "?" and "?" == 0 so ("8" | "7") == 0.

In fact, here's the key.

$\ = "\n"; print chr() . ", " . unpack( "B*", chr ) for ord( "0" ) .. ord( "9" ); print; print chr() . ", " . unpack( "B*", chr ) for ord( "2" | "8" ) .. ord( +"7" | "8" ); __DATA__ 0, 00110000 1, 00110001 2, 00110010 3, 00110011 4, 00110100 5, 00110101 6, 00110110 7, 00110111 8, 00111000 9, 00111001 :, 00111010 ;, 00111011 <, 00111100 =, 00111101 >, 00111110 ?, 00111111