in reply to getting the highest value in a simpler way
Here's a fun approach. We can encapsulate our maximum-finding logic
inside of a closure-based factory function that makes "maximum
finders":
Then we can create a new maximum finder whenever we need one by calling the factory function:sub make_max_finder { my $max; sub { for (@_) { $max = $_ if !defined $max || $_ > $max } $max; } }
We can feed values to our newly made maximum finder, and it will remember the maximum value it has seen:my $max_finder = make_max_finder();
We can pass it more than one value at a time, too:$max_finder->(0); print $max_finder->(); # 0 print $max_finder->(-1); # 0 print $max_finder->(2); # 2
With this factory, we can solve your problem like so:print $max_finder->(-1, 3, 0); # 3 print $max_finder->(-1, 0, 1); # 3
Or, if you have the memory to hold all of your values in an array, the "one-shot" option is available:my $max_finder = make_max_finder(); while (my $next_val = get_next_value()) { $max_finder->($next_val); } $max_finder->(); # retrieve maximum
my $max_value = make_max_finder()->(@values);
Cheers,
Tom
Tom Moertel : Blog / Talks / CPAN / LectroTest / PXSL / Coffee / Movie Rating Decoder
|
---|
In Section
Seekers of Perl Wisdom