Beefy Boxes and Bandwidth Generously Provided by pair Networks
Your skill will accomplish
what the force of many cannot
 
PerlMonks  

comment on

( [id://3333]=superdoc: print w/replies, xml ) Need Help??

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

In reply to Re: Passing Variables by GrandFather
in thread Passing Variables by catfish1116

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post; it's "PerlMonks-approved HTML":



  • Are you posting in the right place? Check out Where do I post X? to know for sure.
  • Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
    <code> <a> <b> <big> <blockquote> <br /> <dd> <dl> <dt> <em> <font> <h1> <h2> <h3> <h4> <h5> <h6> <hr /> <i> <li> <nbsp> <ol> <p> <small> <strike> <strong> <sub> <sup> <table> <td> <th> <tr> <tt> <u> <ul>
  • Snippets of code should be wrapped in <code> tags not <pre> tags. In fact, <pre> tags should generally be avoided. If they must be used, extreme care should be taken to ensure that their contents do not have long lines (<70 chars), in order to prevent horizontal scrolling (and possible janitor intervention).
  • Want more info? How to link or How to display code and escape characters are good places to start.
Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others making s'mores by the fire in the courtyard of the Monastery: (3)
As of 2024-04-19 01:35 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found