Beefy Boxes and Bandwidth Generously Provided by pair Networks
Keep It Simple, Stupid
 
PerlMonks  

Re: Passing Variables

by GrandFather (Saint)
on Feb 28, 2021 at 23:50 UTC ( #11128924=note: print w/replies, xml ) Need Help??


in reply to Passing Variables

Lets refactor that to be a little more Perl idiomatic:

################################################### # # # 2/24/21 # # Program takes finds the average in an # # array and lists out the numbers that were # # above the average found. # # # ################################################### use strict; use warnings; my @numbers = qw(4 12 18 21 35); my $average = find_average(@numbers); my @high_avg = above_average($average, @numbers); print <<STR; The average found for this list is: $average The numbers that were found above average are: @high_avg STR sub find_average { die "find_average expects to be passed a list of numbers" if !@_; my $sum = 0; $sum += $_ for @_; return $sum / @_; } sub above_average { my ($average_num, @values) = @_; return grep {$_ > $average_num} @values; }

Prints:

The average found for this list is: 18 The numbers that were found above average are: 21 35

First note the use of strictures (use strict; use warnings;). Always use strictures.

Then notice that subs are called without & in modern Perl. There are nasty subtle traps using & to call subs, so don't do that.

Use grep to select elements from a list.

Use here docs for outputting large blocks of text.

Use Statement Modifiers for very simple conditional statements or loops.

Return simple results directly rather than assigning them to an intermediate variable, but always use return to make it clear what is returned from the sub.

Assigning a list or array to a scalar (something that has $ at the front) assigns the count of elements so you can use that directly instead of counting the elements as they are processed.

Optimising for fewest key strokes only makes sense transmitting to Pluto or beyond

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://11128924]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others chanting in the Monastery: (5)
As of 2021-04-10 22:49 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found

    Notices?