package DEBUGGER; use Exporter; @ISA = qw(Exporter); $::debug_level = 0; # default debug level sub _check_debug_level { my ($debug_level_low, $debug_level_hi) = @_; $debug_level_hi ||= $::debug_level; return (($::debug_level >= $debug_level_low) && ($::debug_level <= $debug_level_hi)); } # --- break($;$) ---- # set break point. # sub break($;$) { $DB::single = _check_debug_level(@_); } push @EXPORT, 'break'; # # // break() # ------------------- # --- break_if($;$$) ---- # set conditional break point. # (could also be tied to specific # debugging levels) # sub break_if($;$$) { $DB::single = shift && (@_ && _check_debug_level(@_)); } push @EXPORT, 'break_if'; # # // break() # ------------------- sub import { my ($pkg, %args) = @_; $::debug_level = $args{debug_level} if (exists $args{debug_level}); __PACKAGE__->export_to_level(1); } #### use strict; use DEBUGGER ( debug_level => 2, ); my $x = 2 * 2; # will break here if debug level falls between # 1 and 3 (inclusively). break 1,3; my $s = "foobar"; break 5; print "will break here iff debug level is 5\n"; # break here if $x is less than 3 # and debug_level is set to 2 break_if $x < 5, 2; print "exiting...\n";