use strict 0.1; # use UNIVERSAL::VERSION
use English; # demo detection of $& et al
use Benchmark;
use File::Find;
my $count = shift || 100;
my $do_io = shift || (not -t STDIN);
sub add {
$a = $a + 1;
foo();
}
sub foo {
1;
for (1..1000) {
++$a;
++$a;
}
1;
}
BEGIN { add() }
BEGIN { add() }
sub inc {
1;
# call foo and then execute a slow expression *in the same statement*
# With all line profilers except NYTProf, the time for that expression gets
# assigned to the previous statement, i.e., the last statement executed in foo()!
# XXX this doesn't seem to be slow in 5.12+ - need a better example
foo() && 'aaaaaaaaaaa' =~ /((a{0,5}){0,5})*[c]/;
1;
}
timethese( $count, {
add => \&add,
bar => \&inc,
});
END {
warn "ENDING\n";
add()
}
# --- recursion ---
sub fib {
my $n = shift;
return $n if $n < 2;
fib($n-1) + fib($n-2);
}
fib(7);
# --- File::Find ---
sub wanted {
return 1;
}
find( \&wanted, '.');
# --- while with slow conditional ---
if ($do_io) {
print "Enter text. Enter empty line to end.\n" if -t STDIN;
# time waiting for the second and subsequent inputs
# should get assigned to the condition statement
# not the last statement executed in the loop
while (<>) {
chomp;
last if not $_;
1;
}
}