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
-
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.