Attean
view release on metacpan or search on metacpan
lib/Attean/API/Term.pm view on Meta::CPAN
my $sign = $1 || '';
my $num = $2;
$sign = '' if ($sign eq '+');
$num =~ s/^0+(.)/$1/;
return Attean::Literal->decimal("${sign}${num}");
} else {
die "Bad lexical form for xsd:deciaml: '$value'" if ($strict);
return $self;
}
} elsif ($type eq 'float') {
if ($value =~ m/^(?:([-+])?(?:(\d+(?:\.\d*)?|\.\d+)([Ee][-+]?\d+)?|(INF)))|(NaN)$/) {
my $sign = $1;
my $inf = $4;
my $nan = $5;
no warnings 'uninitialized';
$sign = '' if ($sign eq '+');
return Attean::Literal->float("${sign}$inf") if ($inf);
return Attean::Literal->float($nan) if ($nan);
$value = sprintf('%E', $value);
$value =~ m/^(?:([-+])?(?:(\d+(?:\.\d*)?|\.\d+)([Ee][-+]?\d+)?|(INF)))|(NaN)$/;
$sign = $1;
$inf = $4;
$nan = $5;
my $num = $2;
my $exp = $3;
$num =~ s/[.](\d+?)0+/.$1/;
$exp =~ tr/e/E/;
$exp =~ s/E[+]/E/;
$exp =~ s/E(-?)0+([1-9])$/E$1$2/;
$exp =~ s/E(-?)0+$/E${1}0/;
lib/Attean/API/Term.pm view on Meta::CPAN
} elsif ($type eq 'boolean') {
if ($value =~ m/^(true|false|0|1)$/) {
return ($value eq 'true' or $value eq '1')
? Attean::Literal->true
: Attean::Literal->false;
} else {
die "Bad lexical form for xsd:boolean: '$value'" if ($strict);
return $self;
}
} elsif ($type eq 'double') {
if ($value =~ m/^(?:([-+])?(?:(\d+(?:\.\d*)?|\.\d+)([Ee][-+]?\d+)?|(INF)))|(NaN)$/) {
my $sign = $1;
my $inf = $4;
my $nan = $5;
no warnings 'uninitialized';
$sign = '' if ($sign eq '+');
return Attean::Literal->double("${sign}$inf") if ($inf);
return Attean::Literal->double($nan) if ($nan);
$value = sprintf('%E', $value);
$value =~ m/^(?:([-+])?(?:(\d+(?:\.\d*)?|\.\d+)([Ee][-+]?\d+)?|(INF)))|(NaN)$/;
$sign = $1;
$inf = $4;
$nan = $5;
my $num = $2;
my $exp = $3;
$num =~ s/[.](\d+?)0+/.$1/;
$exp =~ tr/e/E/;
$exp =~ s/E[+]/E/;
$exp =~ s/E(-?)0+([1-9])$/E$1$2/;
$exp =~ s/E(-?)0+$/E${1}0/;
( run in 0.230 second using v1.01-cache-2.11-cpan-4d50c553e7e )