Another way:
(On Windoze: Must use ctrl-Z to terminate input.) (Good luck with your homework.)c:\@Work\Perl\monks>perl -wMstrict -le "use List::Util qw(sum); use Regexp::Common; ;; my $user_total = total(<STDIN>); ;; print qq{The total of user-input integers is $user_total}; ;; sub total { ;; my $n = $RE{num}{real}; ;; die qq{user input <<@_>> unuseable} unless @_ == map m{ \A \s* $n (?: \s+ $n)* \s* \z }xms, @_; ;; return sum map m{ $n }xmsg, @_; } " 123 4. .5 0.0 .0 0. -.7 -11 ^Z The total of user-input integers is 115.8
Update: Here's yet another and, I think, better way. A single join is almost certainly going to be more efficient than two map-s; I don't know what I was thinking! (Minimally tested.)
sub total { my $u_i = join '', @_; my $n = $RE{num}{real}; ;; die 'user input >>', @_, '<< unuseable' unless $u_i =~ m{ \A \s* $n (?: \s+ $n)* \s* \z }xms; ;; return sum $u_i =~ m{ $n }xmsg; }
Give a man a fish: <%-{-{-{-<
In reply to Re: Summing numbers
by AnomalousMonk
in thread Summing numbers
by catfish1116
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |