#!/usr/bin/perl

# Idiom #285 Set variable to NaN

use feature 'say';

# built-in support (use POSIX not needed))
my $a = 'nan';

say $a;
# prints string value: nan

say ( 0 + $a );
# prints numeric value: NaN

say '$a string value is ' . $a;
say '$a numeric value is ' . (0+$a);

say '-' x 20;

# POSIX module provides additional control
use POSIX qw(:nan_payload nan isnan issignaling getpayload);

say isnan($a) ? 'true' : 'false';;
# prints true

say $a == $a ? 'true' : 'false';
# prints false because NaN does not equal NaN

say issignaling($a) ? 'true' : 'false';
# prints false because $a is non-signaling

my $b = nan(999);  # set to signaling NaN by adding a payload

say $b;
# prints NaN

say getpayload($b);
# prints 999
