sub make_max_finder { my $max; sub { for (@_) { $max = $_ if !defined $max || $_ > $max } $max; } } #### my $max_finder = make_max_finder(); #### $max_finder->(0); print $max_finder->(); # 0 print $max_finder->(-1); # 0 print $max_finder->(2); # 2 #### print $max_finder->(-1, 3, 0); # 3 print $max_finder->(-1, 0, 1); # 3 #### 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);