use constant MAX_VERBOSITY => 5; BEGIN { my $verbosity = $ARGV[0] || 0; # Or whatever my $eval = ''; for (1..MAX_VERBOSITY) { my $allow = ($_ <= $verbosity) ? 1 : 0; $eval .= "use constant V$_ => $allow;\n"; } eval $eval."1;\n" or die $@; } sub vprint { # Or whatever. our $msg; local *msg = \($_[0]); print("$msg\n"); } vprint("msg1") if V1; # Optimized away if arg is < 1 vprint("msg2") if V2; # Optimized away if arg is < 2 vprint("msg3") if V3; # Optimized away if arg is < 3 vprint("msg4") if V4; # Optimized away if arg is < 4 vprint("msg5") if V5; # Optimized away if arg is < 5