• Status: Solved
• Priority: Medium
• Security: Public
• Views: 210

# Print Only First Three Highest Values

Hi All

I have 8 variables with numeric values:

\$Variable1 = 80;
\$Variable2 = 50;
\$Variable3 = 30;
\$Variable4 = 70;
\$Variable5 = 20;
\$Variable6 = 50;
\$Variable7 = 40;
\$variable8 = 10;

How can I print only the first three with the highest value.

EX:

print "\$Variable1\n \$Variable4\n \$Variable2\n";
0
blnukem
• 2
• 2
1 Solution

Commented:
It is better to store them in an array I think

@array = (80, 50, 30, 70, 20, 50, 40, 10);
@sorted = sort { \$b <=> \$a } @array;

the highest number is now stored at index 0
print "highest: ", \$sorted[0], "\n";
print "second highest: ", \$sorted[1], "\n";
...

remarkt that if you do {\$a <=> \$b}, you sort in an ascending way.
with the current {\$b <=> \$a}, you sort in a descending way
0

Commented:
print "\$_\n" for (sort \$Variable1,\$Variable2,\$Variable3,\$Variable4,\$Variable5,\$Variable6,\$Variable7,\$Variable8)[-3..-1]
0

Author Commented:

Thanks ozo!!
0

Commented:
@ozo,

the sort function - as far as I know, sorts alphabetically, and your solution will run into problems.
But if you change e.g. \$variable8=10 into \$variable8=150, your code will still return 50, 70, 80 because it sorts them alphabetically
same problem if you change variable8 from 10 to 9: your solution will then return 9 as the highest number (higher than 80).
0

Commented:
> sorts alphabetically
true
(sort {\$b<=>\$a} \$Variable1,\$Variable2,\$Variable3,\$Variable4,\$Variable5,\$Variable6,\$Variable7,\$Variable8)[0..2]
would have been better
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.