Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: 1st NCCE now complies with INT00-PL

...

This noncompliant code example improperly uses eq to test two numbers for equality. Counterintuitively, this code prints false.

Code Block
bgColor#ffcccc
langperl
my $num = 02;
# ... 2;
print "Enter a number\n";
my $user_num = <STDIN>;
chomp $user_num;
if ($num eq "02"$user_num) {print "true\n"} else {print "false\n"};

This code will print true if the user enters 2, but false if the user enters 02,The counterintuitive result arises because $num is interpreted as a number. When it is initialized, the 02 string is converted to its numeric representation, which is 2. When it is compared, it is converted back to a string, but this time it has the value 2, so the string comparison fails.

Compliant Solution (Numbers)

This compliant solution uses ==, which interprets its arguments as numbers. This code therefore prints true even though if the right argument to == is explicitly provided as a stringinitialized to some different string like 02.

Code Block
bgColor#ccccff
langperl
my $num = 02;
# ...2;
print "Enter a number\n";
my $user_num = <STDIN>;
chomp $user_num;
if ($num == "02"eq $user_num) {print "true\n"} else {print "false\n"};

...