The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/local/bin/perl -w

use Getopt::Std;
use lib '..';
use Log::Log4perl::AutoCategorize
    (
     # debug => $opt_d,
     alias => 'Logger',
     initfile => 'log-conf',
     );

getopts('d:m:f:b:c:') or die <<OPTS;
  d <opts> : single letter options to control debug in  Log::Log4perl::AutoCategorize
  m <#>    : main loop count (default 50)
  f <#>    : foo() loop count (default 20)
  b <#>    : A::bar() loop count (default 20)
OPTS

$opt_m ||= 5;
$opt_f ||= 2;
$opt_b ||= 2;
$opt_c ||= 2;

Log::Log4perl::AutoCategorize::set_debug($opt_d) if $opt_d;

foreach (1..$opt_m) {
    Logger->warn('something',$_);
    Logger->info('411',$_);
    car();
    suv();
    A->truck();
    A::truck();

    if ($false) {
	# never executed, but reported as such in coverage log
	Logger->info('UnSeen', $_);
    }
    if (0) {
	# optimized out by perl itself. never seen by AutoCategorize's optimizer
	Logger->info('not even seen by optimizer', $_);
    }
}

sub car {
    foreach (1..$opt_f) {
	Logger->warn("2 people", $_,{driver=>'bonnie',shotgun=>'clyde'});
    }
}
sub suv {
    foreach (1..$opt_f) {
	Logger->warn("gas guzzler", $_);
	Logger->warn("pacs vs cafe", $_);
    }
}

package A;

sub truck {
    my @d;
    foreach (1..$main::opt_b) {
	push @d, $_;
	Logger->warn($_,\@d);
	Logger->debug("trucks are noisy $_", \@d);
	# subtle prob here - only 1st debug is seen by AUTOLOAD
	Logger->debug("bug here $_", \@d);
	Logger->debug_1("diesel is polluting $_", \@d);
    }
}

package B::C;

sub train {
    my @d;
    foreach (1..$main::opt_c) {
	push @d, $_;
	Logger->warn($_,\@d);
    }
}

__END__