I like Bruce's Regex-based approach.

Here's how I'd probably approach the problem:

raku -e 'say [+] @*ARGS.grep(+*)' 0 100 200 300 apples 400oranges 2kilos
18.7876 500 grams14 10stars10 sun100moon 77

August 31, 2020 2:28 PM, "Bruce Gray" <robertbrucegr...@gmail.com> wrote:

> my $is_a_number = / ^ \d+ [ '.' \d* ]? $ /;
> 
> my $sum = @*ARGS.grep($is_a_number).sum;
> 
> say $sum;
> 
> — 
> Hope this helps,
> Bruce Gray (Util of PerlMonks)
> 
>> On Aug 31, 2020, at 12:22 PM, William Michels via perl6-users 
>> <perl6-us...@perl.org> wrote:
>> 
>> I think it looks very good, Radhakrishnan! Presumably you are happy
>> with the sum 1195.7876?
>> 
>> ~$ raku -e 'for @*ARGS {.say if ($_.Int // 0) };' 0 100 200 300 apples
>> 400oranges 2kilos 18.7876 500 grams14 10stars10 sun100moon 77
>> 100
>> 200
>> 300
>> 18.7876
>> 500
>> 77
>> 
>> I'm still mulling over whether or not the "!=== 0" is essential. I
>> have yet to mess-up the command line arguments sufficiently to require
>> it, and throwing a zero onto the command line seems to be handled
>> gracefully.
>> 
>> Anyone else want to chime in?
>> 
>> Best, Bill.
>> 
>> On Mon, Aug 31, 2020 at 8:49 AM Radhakrishnan Venkataraman
>> <weor...@gmail.com> wrote:
>>> Please see the following script that checks for type and sums up only the 
>>> numbers passed as
>>> arguments to the script in the command line. I would be grateful if any 
>>> improvement or furtherance
>>> to this script is offered. Thank you.
>>> 
>>> #
>>> # sums the numbers given in command line arguments and prints
>>> #
>>> my $sum = 0;
>>> for @*ARGS
>>> {
>>> $sum += $_.Rat if $_.Int // 0 !=== 0;
>>> }
>>> say $sum;
>>> 
>>> #
>>> # command line execution
>>> # perl6 cla.p6 100 200 300 apples 400oranges 2kilos 18.7876 500 grams14 
>>> 10stars10 sun100moon 77
>>> #

Reply via email to