FWIW, Perl 6 implicitly treats default values as closures, and calls them when no argument is passed that could bind to the optional argument.<p>That way you get a fresh array each time, and you can even use defaults that depend on previous arguments:<p><pre><code> sub integrate(&integrand, $from, $to, $step = ($to - $from) / 100) { ... }</code></pre>