#!/usr/bin/raku # SPDX-FileCopyrightText: Peter Pentchev # SPDX-License-Identifier: BSD-2-Clause my Str:D @TEST_NUMBERS = '1', 'a', '.', '1.2e4.2', '-1.', '+1E-8', '.44'; grammar ValidNumber { token TOP { ? }; token mantissa { | }; token exponent { <[Ee]> ? + } token large-number { ? + ? }; token large-fractional-part { <[.]> * } token small-number { <[.]> + } token int-sign { <[+-]> }; token int-digit { <[0 .. 9]> }; } sub valid-number(Str:D $str) returns Str:D { my $parsed = try ValidNumber.parse($str); !$! && $parsed.defined ?? 'true' !! 'false' } { if (%*ENV{'PWC_FROM_STDIN'} // '') eq '1' { my $line = $*IN.get; say valid-number $line; } else { for @TEST_NUMBERS { say valid-number $^str; } } }