sub x{ my( $s1, $s2, $s3 ) = @_; $s1 *= 10 if $s1; $s2 **= 4 if $s2; $s3 *= $s2 % $s1; return [ { n1 => $s1, n2 => $s2 }, { n1 => 41 * $s2, n2 => ( $s1 * $s2 ) % $s3 } ]; };; $I = 50e3; $t = time; x( 123, 456, 789 ) for 1 .. $I; printf "$I calls took %.4f seconds\n", time()-$t;; 50000 calls took 0.3174 seconds $I = 50e5; $t = time; x( 123, 456, 789 ) for 1 .. $I; printf "$I calls took %.4f seconds\n", time()-$t;; 5000000 calls took 26.5590 seconds