Raw content of Bio::Root::Global
#--------------------------------------------------------------------------------
# PACKAGE : Bio::Root::Global.pm
# PURPOSE : Provides global data, objects, and methods potentially useful to
# many different modules and scripts.
# AUTHOR : Steve Chervitz (sac@bioperl.org)
# CREATED : 3 Sep 1996
# REVISION: $Id: Global.pm,v 1.8 2002/01/11 08:05:31 sac Exp $
#
# INSTALLATION:
# This module is included with the central Bioperl distribution:
# http://bio.perl.org/Core/Latest
# ftp://bio.perl.org/pub/DIST
# Follow the installation instructions included in the README file.
#
# COMMENTS: Edit the $AUTHORITY string to a desired e-mail address.
#
# STRICTNESS, VERBOSITY, and variables containing the words WARN and FATAL
# are considered experimental. The purpose & usage of these is explained
# in Bio::Root::Object.pm.
#
# MODIFIED:
# sac --- Fri Jan 8 00:04:28 1999
# * Added BEGIN block to set $CGI if script is running as a cgi.
# sac --- Tue Dec 1 1998
# * Added $STRICTNESS and $VERBOSITY.
# * Deprecated WARN_ON_FATAL, FATAL_ON_WARN, DONT_WARN and related methods.
# These will eventually be removed.
# sac --- Fri 5 Jun 1998: Added @DAYS.
# sac --- Sun Aug 16 1998: Added $RECORD_ERR and &record_err().
#--------------------------------------------------------------------------------
### POD Documentation:
=head1 NAME
Bio::Root::Global - Global variables and utility functions
=head1 SYNOPSIS
# no real synopsis - see Bio::Root::Object
=head1 DESCRIPTION
The Bio::Root::Global file contains all the global flags
about erro warning etc, and also utility functions, eg
to map numbers to roman numerals.
These functions are generally called by Bio::Root::Object
or somewhere similar, and not directly
=head1 INSTALLATION
This module is included with the central Bioperl distribution:
http://bio.perl.org/Core/Latest
ftp://bio.perl.org/pub/DIST
Follow the installation instructions included in the README file.
=cut
package Bio::Root::Global;
use strict;
BEGIN {
use vars qw($CGI $TIMEOUT_SECS);
# $CGI is a boolean to indicate if the script is running as a CGI.
# Useful for conditionally producing HTML-formatted messages
# or suppressing messages appropriate only for interactive sessions.
$CGI = 1 if $ENV{REMOTE_ADDR} || $ENV{REMOTE_HOST};
}
use Exporter ();
use vars qw($BASE_YEAR @DAYS @MONTHS);
use vars qw(@ISA @EXPORT_OK %EXPORT_TAGS);
@ISA = qw( Exporter );
@EXPORT_OK = qw($AUTHORITY $NEWLINE
$DEBUG $MONITOR $TESTING
$DONT_WARN $WARN_ON_FATAL $FATAL_ON_WARN $RECORD_ERR
$STRICTNESS $VERBOSITY $TIMEOUT_SECS
$CGI $GLOBAL
$BASE_YEAR %ROMAN_NUMS @MONTHS @DAYS
&roman2int &debug &monitor &testing &dont_warn &record_err
&warn_on_fatal &fatal_on_warn &strictness &verbosity
);
%EXPORT_TAGS = (
std =>[qw($DEBUG $MONITOR $TESTING $NEWLINE
$DONT_WARN $WARN_ON_FATAL $FATAL_ON_WARN $RECORD_ERR
$STRICTNESS $VERBOSITY
&debug &monitor &testing &dont_warn
&warn_on_fatal &fatal_on_warn &record_err
&strictness &verbosity
&roman2int $AUTHORITY $CGI $GLOBAL)],
obj =>[qw($GLOBAL)],
devel =>[qw($DEBUG $MONITOR $TESTING $DONT_WARN
$WARN_ON_FATAL $FATAL_ON_WARN $RECORD_ERR
$STRICTNESS $VERBOSITY $NEWLINE
&debug &monitor &testing &dont_warn
&strictness &verbosity
&warn_on_fatal &fatal_on_warn)],
data =>[qw($BASE_YEAR %ROMAN_NUMS @MONTHS @DAYS)],
);
# Note: record_err() is not included in the devel tag to allow Bio::Root:Object.pm
# to define it without a name clash.
######################################
## Data ##
######################################
use vars qw($AUTHORITY $DEBUG $MONITOR $TESTING $DONT_WARN $WARN_ON_FATAL
$FATAL_ON_WARN $RECORD_ERR $STRICTNESS $VERBOSITY $NEWLINE
%ROMAN_NUMS $GLOBAL);
# Who should receive feedback from users and possibly automatic error messages.
$AUTHORITY = 'sac@bioperl.org';
$DEBUG = 0;
$MONITOR = 0;
$TESTING = 0;
$DONT_WARN = 0;
$WARN_ON_FATAL = 0;
$FATAL_ON_WARN = 0;
$RECORD_ERR = 0;
$STRICTNESS = 0;
$VERBOSITY = 0;
$TIMEOUT_SECS = 30; # Number of seconds to wait for input in I/O functions.
$BASE_YEAR = 1900;
$NEWLINE = $ENV{'NEWLINE'} || undef;
%ROMAN_NUMS = ('1'=>'I', '2'=>'II', '3'=>'III', '4'=>'IV', '5'=>'V',
'6'=>'VI', '7'=>'VII', '8'=>'VIII', '9'=>'IX', '10'=>'X',
'11'=>'XI', '12'=>'XII', '13'=>'XIII', '14'=>'XIV', '15'=>'XV',
'16'=>'XVI', '17'=>'XVII', '18'=>'XVIII', '19'=>'XIX', '20'=>'XX',
'21'=>'XXI', '22'=>'XXII',
);
@MONTHS = qw(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec);
@DAYS = qw(Sun Mon Tue Wed Thu Fri Sat);
# The implicit global object. Used for trapping miscellaneous errors/exceptions.
# Created without using or requiring Bio::Root::Object.pm, because Object.pm uses Global.pm.
# Just be sure to use Bio::Root::Object.pm, or a module that uses it.
$GLOBAL = {};
bless $GLOBAL, 'Bio::Root::Object';
$GLOBAL->{'_name'} = 'Global object';
######################################
## Methods ##
######################################
sub roman2int {
my $roman = uc(shift);
foreach (keys %ROMAN_NUMS) {
return $_ if $ROMAN_NUMS{$_} eq $roman;
}
# Alternatively:
# my @int = grep $ROMAN_NUMS{$_} eq $roman, keys %ROMAN_NUMS;
# return $int[0];
undef;
}
sub debug {
my $level = shift;
if( defined $level) { $DEBUG = $level }
else { $DEBUG = 0 }
# $MONITOR and do{ print STDERR $DEBUG ? "Debug on ($DEBUG).\n\n" : "Debug off.\n\n"; };
$MONITOR and do{ print STDERR $DEBUG ? "Debug on ($DEBUG).\n\n" : ""; };
$DEBUG;
}
sub monitor {
my $level = shift;
if( defined $level) { $MONITOR = $level }
else { $MONITOR = 0 }
$DEBUG and (print STDERR "Monitor on ($MONITOR).\n\n");
$MONITOR;
}
sub testing {
my $level = shift;
if( defined $level) { $TESTING = $level }
else { $TESTING = 0 }
$TESTING ? ($MONITOR && print STDERR "Testing on ($TESTING).\n\n") : ($MONITOR && print STDERR "Testing off.\n\n");
$TESTING;
}
sub strictness {
# Values can integers from -2 to 2
# See Bio::Root::Object::strict() for more explanation.
my $arg = shift;
if( defined $arg) { $STRICTNESS = $arg}
$DEBUG && print STDERR "\n*** STRICTNESS: $arg ***\n\n";
$STRICTNESS;
}
sub verbosity {
# Values can integers from -1 to 1
# See Bio::Root::Object::verbose() for more explanation.
my $arg = shift;
if( defined $arg) { $VERBOSITY = $arg}
$DEBUG && print STDERR "\n*** VERBOSITY: $arg ***\n\n";
$VERBOSITY;
}
sub record_err {
if( defined shift) { $RECORD_ERR = 1}
else { $RECORD_ERR = 0 }
$RECORD_ERR ? ($DEBUG && print STDERR "\n*** RECORD_ERR on. ***\n\n") : ($DEBUG && print STDERR "RECORD_ERR off.\n\n");
$RECORD_ERR;
}
##
## The following methods are deprecated and will eventually be removed.
##
sub dont_warn {
my $arg = shift;
!$CGI and print STDERR "\n$0: Deprecated method dont_warn() called. Use verbosity(-1) instead\n";
if( $arg) { verbosity(-1)}
else { verbosity(0); }
}
sub warn_on_fatal {
my $arg = shift;
!$CGI and print STDERR "\n$0: Deprecated method warn_on_fatal() called. Use strictness(-2) instead\n";
if( $arg) { strictness(-2)}
else { strictness(0); }
}
sub fatal_on_warn {
my $arg = shift;
!$CGI and print STDERR "\n$0: Deprecated method fatal_on_warn() called. Use strictness(2) instead\n";
if( $arg) { strictness(2)}
else { strictness(0); }
}
#####################################################################################
# END OF PACKAGE
#####################################################################################
1;