# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #
# &Vopt("5myname.log"); #
# Set the verbosity from various environment variables. The value may be a #
# verbose level (1 digit), plus an optional output file name. The file V is #
# opened to the file, if any, or STDERR by default. The default value for the #
# verbosity level is 1, which generally means to produce only serious error #
# messages. #
# #
# Here's how this routine is typically called: #
# ($P = $0) =~ s'.*/''; # Program name without directories #
# &Vopt($ENV{"V_$P"} || $ENV{"D_$P"} || $ENV{"T_$P"} || '1'); #
# That's for when you want to call this a "verbose" and "debug" and "trace" #
# facility. I mostly just use the V_$P environment variable. #
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #
sub Vopt {
$Vopt = shift || '1'; # Make sure we have a verbosity string
$V = 1 unless defined $V;
($P = $0) =~ s'.*/'' unless defined($P);
print "
Vopt: Vopt=\"$Vopt\"
\n" if $V>2;
if ($Vopt =~ /^(\d+)(.+)$/) {
$V = int($1); # Verbose level
$Vfil = $2; # Verbose output file
if (open(V,">>$Vfil")) { # Try to append to the file
open(STDERR,">>&V"); # Switch STDERR over to V
} else {
print V "$P: Can't write \"$Vfil\" ($!)\n" if $V>0;
open(V,">>&STDERR"); # STDERR is the default
}
} elsif ($Vopt) { # File name only?
if (open(V,">>$Vopt")) { # Try to append to the file
open(STDERR,">>&V"); # Switch STDERR over to V
} else {
print V "$P: Can't write \"$Vopt\" ($!)\n" if $V>0;
open(V,">>&STDERR"); # STDERR is the default
}
} else {
$V ++; # Null arg, just increment the verbose level
open(V,">>&STDERR"); # And write to STDERR
}
select V; $| = 1; # Make V unbuffered
select STDOUT; $| = 1; # Make sure STDERR is unbuffered
$esep = '=' x 70; # Create a couple of global spacers
$hsep = '-' x 70;
print V "\n$P $esep\n" if $V>1; # Tell the world if we're verbose
print V "$P started with V=$V [pid=$$] ", `date` if $V>1;
}
1; # Report success in loading this file.