in reply to To warn or not to warn, that is the question

Your benchmark is meaningless because @nums is not in scope when the benchmarked code is executed. That's because it's a my variable and has lexical scope; when the code is executed in a different scope (package Benchmark), @nums is no longer in scope. So you're doing your tests on an empty array.

Instead of a my var you should use use vars.

When I run your test having done that I get this:

Benchmark: running Do_not_test, Test_defined, each for at least 10 CPU + seconds... Do_not_test: 10 wallclock secs (10.18 usr + 0.00 sys = 10.18 CPU) @ 7 +98.13/s (n=8125) Test_defined: 10 wallclock secs (10.16 usr + 0.00 sys = 10.16 CPU) @ +671.75/s (n=6825)
So there is a difference.