annotate variant_effect_predictor/Bio/Root/Utilities.pm @ 0:1f6dce3d34e0

Uploaded
author mahtabm
date Thu, 11 Apr 2013 02:01:53 -0400
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1 #-----------------------------------------------------------------------------
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2 # PACKAGE : Bio::Root::Utilities.pm
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
3 # PURPOSE : Provides general-purpose utilities of potential interest to any Perl script.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
4 # AUTHOR : Steve Chervitz (sac@bioperl.org)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
5 # CREATED : Feb 1996
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
6 # REVISION: $Id: Utilities.pm,v 1.21 2002/10/22 07:38:37 lapp Exp $
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
7 # STATUS : Alpha
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
8 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
9 # This module manages file compression and uncompression using gzip or
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
10 # the UNIX compress programs (see the compress() and uncompress() methods).
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
11 # Also, it can create filehandles from gzipped files. If you want to use a
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
12 # different compression utility (such as zip, pkzip, stuffit, etc.) you
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
13 # are on your own.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
14 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
15 # If you manage to incorporate an alternate compression utility into this
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
16 # module, please post a note to the bio.perl.org mailing list
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
17 # bioperl-l@bioperl.org
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
18 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
19 # TODO : Configure $GNU_PATH during installation.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
20 # Improve documentation (POD).
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
21 # Make use of Date::Manip and/or Date::DateCalc as appropriate.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
22 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
23 # MODIFICATIONS: See bottom of file.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
24 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
25 # Copyright (c) 1996-2000 Steve Chervitz. All Rights Reserved.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
26 # This module is free software; you can redistribute it and/or
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
27 # modify it under the same terms as Perl itself.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
28 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
29 #-----------------------------------------------------------------------------
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
30
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
31 package Bio::Root::Utilities;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
32 use strict;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
33
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
34 BEGIN {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
35 use vars qw($Loaded_POSIX $Loaded_IOScalar);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
36 $Loaded_POSIX = 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
37 unless( eval "require POSIX" ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
38 $Loaded_POSIX = 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
39 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
40 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
41
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
42 use Bio::Root::Global qw(:data :std $TIMEOUT_SECS);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
43 use Bio::Root::Object ();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
44 use Exporter ();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
45 #use AutoLoader;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
46 #*AUTOLOAD = \&AutoLoader::AUTOLOAD;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
47
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
48 use vars qw( @ISA @EXPORT_OK %EXPORT_TAGS );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
49 @ISA = qw( Bio::Root::Root Exporter);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
50 @EXPORT_OK = qw($Util);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
51 %EXPORT_TAGS = ( obj => [qw($Util)],
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
52 std => [qw($Util)],);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
53
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
54 use vars qw($ID $VERSION $Util $GNU_PATH $DEFAULT_NEWLINE);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
55
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
56 $ID = 'Bio::Root::Utilities';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
57 $VERSION = 0.05;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
58
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
59 # $GNU_PATH points to the directory containing the gzip and gunzip
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
60 # executables. It may be required for executing gzip/gunzip
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
61 # in some situations (e.g., when $ENV{PATH} doesn't contain this dir.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
62 # Customize $GNU_PATH for your site if the compress() or
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
63 # uncompress() functions are generating exceptions.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
64 $GNU_PATH = '';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
65 #$GNU_PATH = '/tools/gnu/bin/';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
66
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
67 $DEFAULT_NEWLINE = "\012"; # \n (used if get_newline() fails for some reason)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
68
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
69 ## Static UTIL object.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
70 $Util = {};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
71 bless $Util, $ID;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
72 $Util->{'_name'} = 'Static Utilities object';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
73
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
74 ## POD Documentation:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
75
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
76 =head1 NAME
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
77
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
78 Bio::Root::Utilities - General-purpose utility module
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
79
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
80 =head1 SYNOPSIS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
81
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
82 =head2 Object Creation
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
83
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
84 use Bio::Root::Utilities qw(:obj);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
85
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
86 There is no need to create a new Bio::Root::Utilities.pm object when
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
87 the C<:obj> tag is used. This tag will import the static $Util
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
88 object created by Bio::Root::Utilities.pm into your name space. This
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
89 saves you from having to call C<new Bio::Root::Utilities>.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
90
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
91 You are free to not use the :obj tag and create the object as you
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
92 like, but a Bio::Root::Utilities object is not configurable; any given
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
93 script only needs a single copy.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
94
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
95 $date_stamp = $Util->date_format('yyy-mm-dd');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
96
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
97 $clean = $Util->untaint($dirty);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
98
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
99 $Util->mail_authority("Something you should know about...");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
100
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
101 ...and other methods. See below.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
102
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
103 =head1 INSTALLATION
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
104
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
105 This module is included with the central Bioperl distribution:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
106
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
107 http://bio.perl.org/Core/Latest
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
108 ftp://bio.perl.org/pub/DIST
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
109
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
110 Follow the installation instructions included in the README file.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
111
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
112 =head1 DESCRIPTION
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
113
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
114 Provides general-purpose utilities of potential interest to any Perl script.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
115 Scripts and modules are expected to use the static $Util object exported by
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
116 this package with the C<:obj> tag.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
117
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
118 =head1 DEPENDENCIES
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
119
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
120 B<Bio::Root::Utilities.pm> inherits from B<Bio::Root::Object.pm>.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
121 It also relies on the GNU gzip program for file compression/uncompression.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
122
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
123 =head1 SEE ALSO
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
124
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
125 Bio::Root::Object.pm - Core object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
126 Bio::Root::Global.pm - Manages global variables/constants
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
127
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
128 http://bio.perl.org/Projects/modules.html - Online module documentation
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
129 http://bio.perl.org/ - Bioperl Project Homepage
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
130
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
131 FileHandle.pm (included in the Perl distribution or CPAN).
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
132
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
133 =head1 FEEDBACK
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
134
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
135 =head2 Mailing Lists
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
136
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
137 User feedback is an integral part of the evolution of this and other Bioperl modules.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
138 Send your comments and suggestions preferably to one of the Bioperl mailing lists.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
139 Your participation is much appreciated.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
140
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
141 bioperl-l@bioperl.org - General discussion
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
142 http://bioperl.org/MailList.shtml - About the mailing lists
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
143
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
144 =head2 Reporting Bugs
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
145
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
146 Report bugs to the Bioperl bug tracking system to help us keep track the bugs and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
147 their resolution. Bug reports can be submitted via email or the web:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
148
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
149 bioperl-bugs@bio.perl.org
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
150 http://bugzilla.bioperl.org/
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
151
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
152 =head1 AUTHOR
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
153
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
154 Steve Chervitz E<lt>sac@bioperl.orgE<gt>
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
155
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
156 See L<the FEEDBACK section | FEEDBACK> for where to send bug reports and comments.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
157
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
158 =head1 VERSION
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
159
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
160 Bio::Root::Utilities.pm, 0.042
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
161
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
162 =head1 ACKNOWLEDGEMENTS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
163
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
164 This module was developed under the auspices of the Saccharomyces Genome
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
165 Database:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
166 http://genome-www.stanford.edu/Saccharomyces
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
167
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
168 =head1 COPYRIGHT
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
169
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
170 Copyright (c) 1997-98 Steve Chervitz. All Rights Reserved.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
171 This module is free software; you can redistribute it and/or
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
172 modify it under the same terms as Perl itself.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
173
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
174 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
175
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
176 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
177 ##
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
178 ###
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
179 #### END of main POD documentation.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
180 ###
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
181 ##
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
182 #'
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
183
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
184
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
185 =head1 APPENDIX
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
186
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
187 Methods beginning with a leading underscore are considered private
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
188 and are intended for internal use by this module. They are
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
189 B<not> considered part of the public interface and are described here
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
190 for documentation purposes only.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
191
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
192 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
193
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
194
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
195 ############################################################################
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
196 ## INSTANCE METHODS ##
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
197 ############################################################################
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
198
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
199 =head2 date_format
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
200
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
201 Title : date_format
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
202 Usage : $Util->date_format( [FMT], [DATE])
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
203 Purpose : -- Get a string containing the formated date or time
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
204 : taken when this routine is invoked.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
205 : -- Provides a way to avoid using `date`.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
206 : -- Provides an interface to localtime().
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
207 : -- Interconverts some date formats.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
208 :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
209 : (For additional functionality, use Date::Manip or
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
210 : Date::DateCalc available from CPAN).
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
211 Example : $Util->date_format();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
212 : $date = $Util->date_format('yyyy-mmm-dd', '11/22/92');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
213 Returns : String (unless 'list' is provided as argument, see below)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
214 :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
215 : 'yyyy-mm-dd' = 1996-05-03 # default format.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
216 : 'yyyy-dd-mm' = 1996-03-05
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
217 : 'yyyy-mmm-dd' = 1996-May-03
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
218 : 'd-m-y' = 3-May-1996
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
219 : 'd m y' = 3 May 1996
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
220 : 'dmy' = 3may96
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
221 : 'mdy' = May 3, 1996
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
222 : 'ymd' = 96may3
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
223 : 'md' = may3
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
224 : 'year' = 1996
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
225 : 'hms' = 23:01:59 # 'hms' can be tacked on to any of the above options
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
226 : # to add the time stamp: eg 'dmyhms'
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
227 : 'full' | 'unix' = UNIX-style date: Tue May 5 22:00:00 1998
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
228 : 'list' = the contents of localtime(time) in an array.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
229 Argument : (all are optional)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
230 : FMT = yyyy-mm-dd | yyyy-dd-mm | yyyy-mmm-dd |
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
231 : mdy | ymd | md | d-m-y | hms | hm
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
232 : ('hms' may be appended to any of these to
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
233 : add a time stamp)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
234 :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
235 : DATE = String containing date to be converted.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
236 : Acceptable input formats:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
237 : 12/1/97 (for 1 December 1997)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
238 : 1997-12-01
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
239 : 1997-Dec-01
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
240 Throws :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
241 Comments : Relies on the $BASE_YEAR constant exported by Bio:Root::Global.pm.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
242 :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
243 : If you don't care about formatting or using backticks, you can
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
244 : always use: $date = `date`;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
245 :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
246 : For more features, use Date::Manip.pm, (which I should
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
247 : probably switch to...)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
248
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
249 See Also : L<file_date>(), L<month2num>()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
250
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
251 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
252
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
253 #---------------'
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
254 sub date_format {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
255 #---------------
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
256 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
257 my $option = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
258 my $date = shift; # optional date to be converted.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
259
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
260 my($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
261
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
262 $option ||= 'yyyy-mm-dd';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
263
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
264 my ($month_txt, $day_txt, $month_num, $fullYear);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
265 my (@date);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
266
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
267 # Load a supplied date for conversion:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
268 if(defined($date) && ($date =~ /[\D-]+/)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
269 if( $date =~ /\//) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
270 ($mon,$mday,$year) = split(/\//, $date);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
271 } elsif($date =~ /(\d{4})-(\d{1,2})-(\d{1,2})/) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
272 ($year,$mon,$mday) = ($1, $2, $3);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
273 } elsif($date =~ /(\d{4})-(\w{3,})-(\d{1,2})/) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
274 ($year,$mon,$mday) = ($1, $2, $3);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
275 $mon = $self->month2num($2);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
276 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
277 print STDERR "\n*** Unsupported input date format: $date\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
278 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
279 if(length($year) == 4) { $year = substr $year, 2; }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
280 $mon -= 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
281 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
282 ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = @date =
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
283 localtime(($date ? $date : time()));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
284 return @date if $option =~ /list/i;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
285 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
286 $month_txt = $MONTHS[$mon];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
287 $day_txt = $DAYS[$wday] if defined $wday;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
288 $month_num = $mon+1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
289 $fullYear = $BASE_YEAR+$year;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
290
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
291 # print "sec: $sec, min: $min, hour: $hour, month: $mon, m-day: $mday, year: $year\nwday: $wday, yday: $yday, dst: $isdst";<STDIN>;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
292
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
293 if( $option =~ /yyyy-mm-dd/i ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
294 $date = sprintf "%4d-%02d-%02d",$fullYear,$month_num,$mday;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
295 } elsif( $option =~ /yyyy-dd-mm/i ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
296 $date = sprintf "%4d-%02d-%02d",$fullYear,$mday,$month_num;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
297 } elsif( $option =~ /yyyy-mmm-dd/i ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
298 $date = sprintf "%4d-%3s-%02d",$fullYear,$month_txt,$mday;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
299 } elsif( $option =~ /full|unix/i ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
300 $date = sprintf "%3s %3s %2d %02d:%02d:%02d %d",$day_txt, $month_txt, $mday, $hour, $min, $sec, $fullYear;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
301 } elsif( $option =~ /mdy/i ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
302 $date = "$month_txt $mday, $fullYear";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
303 } elsif( $option =~ /ymd/i ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
304 $date = $year."\l$month_txt$mday";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
305 } elsif( $option =~ /dmy/i ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
306 $date = $mday."\l$month_txt$year";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
307 } elsif( $option =~ /md/i ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
308 $date = "\l$month_txt$mday";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
309 } elsif( $option =~ /d-m-y/i ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
310 $date = "$mday-$month_txt-$fullYear";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
311 } elsif( $option =~ /d m y/i ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
312 $date = "$mday $month_txt $fullYear";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
313 } elsif( $option =~ /year/i ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
314 $date = $fullYear;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
315 } elsif( $option =~ /dmy/i ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
316 $date = $mday.'-'.$month_txt.'-'.$fullYear;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
317 } elsif($option and $option !~ /hms/i) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
318 print STDERR "\n*** Unrecognized date format request: $option\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
319 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
320
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
321 if( $option =~ /hms/i) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
322 $date .= " $hour:$min:$sec" if $date;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
323 $date ||= "$hour:$min:$sec";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
324 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
325
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
326 return $date || join(" ", @date);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
327 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
328
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
329
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
330 =head2 month2num
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
331
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
332 Title : month2num
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
333 Purpose : Converts a string containing a name of a month to integer
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
334 : representing the number of the month in the year.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
335 Example : $Util->month2num("march"); # returns 3
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
336 Argument : The string argument must contain at least the first
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
337 : three characters of the month's name. Case insensitive.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
338 Throws : Exception if the conversion fails.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
339
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
340 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
341
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
342 #--------------'
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
343 sub month2num {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
344 #--------------
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
345
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
346 my ($self, $str) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
347
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
348 # Get string in proper format for conversion.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
349 $str = substr($str, 0, 3);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
350 for(0..$#MONTHS) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
351 return $_+1 if $str =~ /$MONTHS[$_]/i;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
352 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
353 $self->throw("Invalid month name: $str");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
354 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
355
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
356 =head2 num2month
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
357
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
358 Title : num2month
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
359 Purpose : Does the opposite of month2num.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
360 : Converts a number into a string containing a name of a month.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
361 Example : $Util->num2month(3); # returns 'Mar'
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
362 Throws : Exception if supplied number is out of range.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
363
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
364 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
365
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
366 #-------------
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
367 sub num2month {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
368 #-------------
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
369 my ($self, $num) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
370
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
371 $self->throw("Month out of range: $num") if $num < 1 or $num > 12;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
372 return $MONTHS[$num];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
373 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
374
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
375 =head2 compress
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
376
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
377 Title : compress
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
378 Usage : $Util->compress(filename, [tmp]);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
379 Purpose : Compress a file to conserve disk space.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
380 Example : $Util->compress("/usr/people/me/data.txt");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
381 Returns : String (name of compressed file, full path).
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
382 Argument : filename = String (name of file to be compressed, full path).
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
383 : If the supplied filename ends with '.gz' or '.Z',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
384 : that extension will be removed before attempting to compress.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
385 : tmp = boolean,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
386 : If true, (or if user is not the owner of the file)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
387 : the file is compressed to a tmp file
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
388 : If false, file is clobbered with the compressed version.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
389 Throws : Exception if file cannot be compressed
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
390 : If user is not owner of the file, generates a warning
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
391 : and compresses to a tmp file.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
392 : To avoid this warning, use the -o file test operator
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
393 : and call this function with a true second argument.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
394 Comments : Attempts to compress using gzip (default compression level).
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
395 : If that fails, will attempt to use compress.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
396 : In some situations, the full path to the gzip executable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
397 : may be required. This can be specified with the $GNU_PATH
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
398 : package global variable. When installed, $GNU_PATH is an
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
399 : empty string.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
400
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
401 See Also : L<uncompress>()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
402
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
403 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
404
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
405 #------------'
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
406 sub compress {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
407 #------------
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
408 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
409 my $fileName = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
410 my $tmp = shift || 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
411
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
412 if($fileName =~ /(\.gz|\.Z)$/) { $fileName =~ s/$1$//; };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
413 $DEBUG && print STDERR "gzipping file $fileName";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
414
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
415 my ($compressed, @args);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
416
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
417 if($tmp or not -o $fileName) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
418 if($Loaded_POSIX) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
419 $compressed = POSIX::tmpnam;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
420 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
421 $compressed = _get_pseudo_tmpnam();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
422 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
423 $compressed .= ".tmp.bioperl";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
424 $compressed .= '.gz';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
425 @args = ($GNU_PATH."gzip -f < $fileName > $compressed");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
426 not $tmp and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
427 $self->warn("Not owner of file $fileName\nCompressing to tmp file $compressed.");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
428 $tmp = 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
429 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
430 $compressed = "$fileName.gz";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
431 @args = ($GNU_PATH.'gzip', '-f', $fileName);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
432 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
433
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
434 if(system(@args) != 0) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
435 # gzip may not be present. Try compress.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
436 $compressed = "$fileName.Z";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
437 if($tmp) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
438 @args = ("/usr/bin/compress -f < $fileName > $compressed");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
439 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
440 @args = ('/usr/bin/compress', '-f', $fileName);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
441 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
442 system(@args) == 0 or
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
443 $self->throw("Failed to gzip/compress file $fileName: $!",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
444 "Confirm current \$GNU_PATH: $GNU_PATH",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
445 "Edit \$GNU_PATH in Bio::Root::Utilities.pm if necessary.");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
446 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
447
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
448 return $compressed;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
449 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
450
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
451
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
452 =head2 uncompress
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
453
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
454 Title : uncompress
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
455 Usage : $Util->uncompress(filename, [tmp]);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
456 Purpose : Uncompress a file.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
457 Example : $Util->uncompress("/usr/people/me/data.txt.gz");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
458 Returns : String (name of uncompressed file, full path).
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
459 Argument : filename = String (name of file to be uncompressed, full path).
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
460 : If the supplied filename does not end with '.gz' or '.Z'
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
461 : a '.gz' will be appended before attempting to uncompress.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
462 : tmp = boolean,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
463 : If true, (or if user is not the owner of the file)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
464 : the file is uncompressed to a tmp file
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
465 : If false, file is clobbered with the uncompressed version.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
466 Throws : Exception if file cannot be uncompressed
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
467 : If user is not owner of the file, generates a warning
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
468 : and uncompresses to a tmp file.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
469 : To avoid this warning, use the -o file test operator
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
470 : and call this function with a true second argument.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
471 Comments : Attempts to uncompress using gunzip.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
472 : If that fails, will use uncompress.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
473 : In some situations, the full path to the gzip executable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
474 : may be required. This can be specified with the $GNU_PATH
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
475 : package global variable. When installed, $GNU_PATH is an
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
476 : empty string.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
477
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
478 See Also : L<compress>()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
479
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
480 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
481
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
482 #---------------
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
483 sub uncompress {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
484 #---------------
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
485 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
486 my $fileName = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
487 my $tmp = shift || 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
488
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
489 if(not $fileName =~ /(\.gz|\.Z)$/) { $fileName .= '.gz'; }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
490 $DEBUG && print STDERR "gunzipping file $fileName";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
491
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
492 my($uncompressed, @args);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
493
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
494 if($tmp or not -o $fileName) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
495 if($Loaded_POSIX) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
496 $uncompressed = POSIX::tmpnam;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
497 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
498 $uncompressed = _get_pseudo_tmpnam();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
499 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
500 $uncompressed .= ".tmp.bioperl";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
501 @args = ($GNU_PATH."gunzip -f < $fileName > $uncompressed");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
502 not $tmp and $self->verbose > 0 and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
503 $self->warn("Not owner of file $fileName\nUncompressing to tmp file $uncompressed.");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
504 $tmp = 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
505 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
506 @args = ($GNU_PATH.'gunzip', '-f', $fileName);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
507 ($uncompressed = $fileName) =~ s/(\.gz|\.Z)$//;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
508 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
509
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
510 # $ENV{'PATH'} = '/tools/gnu/bin';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
511
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
512 if(system(@args) != 0) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
513 # gunzip may not be present. Try uncompress.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
514 ($uncompressed = $fileName) =~ s/(\.gz|\.Z)$//;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
515 if($tmp) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
516 @args = ("/usr/bin/uncompress -f < $fileName > $uncompressed");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
517 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
518 @args = ('/usr/bin/uncompress', '-f', $fileName);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
519 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
520 system(@args) == 0 or
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
521 $self->throw("Failed to gunzip/uncompress file $fileName: $!",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
522 "Confirm current \$GNU_PATH: $GNU_PATH",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
523 "Edit \$GNU_PATH in Bio::Root::Utilities.pm if necessary.");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
524 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
525
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
526 return $uncompressed;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
527 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
528
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
529
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
530 =head2 file_date
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
531
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
532 Title : file_date
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
533 Usage : $Util->file_date( filename [,date_format])
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
534 Purpose : Obtains the date of a given file.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
535 : Provides flexible formatting via date_format().
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
536 Returns : String = date of the file as: yyyy-mm-dd (e.g., 1997-10-15)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
537 Argument : filename = string, full path name for file
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
538 : date_format = string, desired format for date (see date_format()).
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
539 : Default = yyyy-mm-dd
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
540 Thows : Exception if no file is provided or does not exist.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
541 Comments : Uses the mtime field as obtained by stat().
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
542
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
543 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
544
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
545 #--------------
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
546 sub file_date {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
547 #--------------
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
548 my ($self, $file, $fmt) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
549
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
550 $self->throw("No such file: $file") if not $file or not -e $file;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
551
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
552 $fmt ||= 'yyyy-mm-dd';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
553
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
554 my @file_data = stat($file);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
555 return $self->date_format($fmt, $file_data[9]); # mtime field
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
556 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
557
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
558
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
559 =head2 untaint
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
560
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
561 Title : untaint
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
562 Purpose : To remove nasty shell characters from untrusted data
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
563 : and allow a script to run with the -T switch.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
564 : Potentially dangerous shell meta characters: &;`'\"|*?!~<>^()[]{}$\n\r
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
565 : Accept only the first block of contiguous characters:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
566 : Default allowed chars = "-\w.', ()"
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
567 : If $relax is true = "-\w.', ()\/=%:^<>*"
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
568 Usage : $Util->untaint($value, $relax)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
569 Returns : String containing the untained data.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
570 Argument: $value = string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
571 : $relax = boolean
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
572 Comments:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
573 This general untaint() function may not be appropriate for every situation.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
574 To allow only a more restricted subset of special characters
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
575 (for example, untainting a regular expression), then using a custom
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
576 untainting mechanism would permit more control.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
577
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
578 Note that special trusted vars (like $0) require untainting.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
579
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
580 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
581
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
582 #------------`
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
583 sub untaint {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
584 #------------
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
585 my($self,$value,$relax) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
586 $relax ||= 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
587 my $untainted;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
588
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
589 $DEBUG and print STDERR "\nUNTAINT: $value\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
590
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
591 defined $value || return;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
592
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
593 if( $relax ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
594 $value =~ /([-\w.\', ()\/=%:^<>*]+)/;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
595 $untainted = $1
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
596 # } elsif( $relax == 2 ) { # Could have several degrees of relax.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
597 # $value =~ /([-\w.\', ()\/=%:^<>*]+)/;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
598 # $untainted = $1
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
599 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
600 $value =~ /([-\w.\', ()]+)/;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
601 $untainted = $1
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
602 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
603
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
604 $DEBUG and print STDERR "UNTAINTED: $untainted\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
605
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
606 $untainted;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
607 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
608
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
609
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
610 =head2 mean_stdev
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
611
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
612 Title : mean_stdev
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
613 Usage : ($mean, $stdev) = $Util->mean_stdev( @data )
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
614 Purpose : Calculates the mean and standard deviation given a list of numbers.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
615 Returns : 2-element list (mean, stdev)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
616 Argument : list of numbers (ints or floats)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
617 Thows : n/a
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
618
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
619 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
620
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
621 #---------------
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
622 sub mean_stdev {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
623 #---------------
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
624 my ($self, @data) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
625 my $mean = 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
626 foreach (@data) { $mean += $_; }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
627 $mean /= scalar @data;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
628 my $sum_diff_sqd = 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
629 foreach (@data) { $sum_diff_sqd += ($mean - $_) * ($mean - $_); }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
630 my $stdev = sqrt(abs($sum_diff_sqd/(scalar @data)-1));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
631 return ($mean, $stdev);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
632 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
633
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
634
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
635 =head2 count_files
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
636
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
637 Title : count_files
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
638 Purpose : Counts the number of files/directories within a given directory.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
639 : Also reports the number of text and binary files in the dir
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
640 : as well as names of these files and directories.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
641 Usage : count_files(\%data)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
642 : $data{-DIR} is the directory to be analyzed. Default is ./
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
643 : $data{-PRINT} = 0|1; if 1, prints results to STDOUT, (default=0).
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
644 Argument : Hash reference (empty)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
645 Returns : n/a;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
646 : Modifies the hash ref passed in as the sole argument.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
647 : $$href{-TOTAL} scalar
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
648 : $$href{-NUM_TEXT_FILES} scalar
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
649 : $$href{-NUM_BINARY_FILES} scalar
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
650 : $$href{-NUM_DIRS} scalar
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
651 : $$href{-T_FILE_NAMES} array ref
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
652 : $$href{-B_FILE_NAMES} array ref
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
653 : $$href{-DIRNAMES} array ref
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
654
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
655 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
656
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
657 #----------------
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
658 sub count_files {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
659 #----------------
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
660 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
661 my $href = shift; # Reference to an empty hash.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
662 my( $name, @fileLine);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
663 my $dir = $$href{-DIR} || './';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
664 my $print = $$href{-PRINT} || 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
665
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
666 ### Make sure $dir ends with /
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
667 $dir !~ /\/$/ and do{ $dir .= '/'; $$href{-DIR} = $dir; };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
668
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
669 open ( PIPE, "ls -1 $dir |" ) || $self->throw("Can't open input pipe: $!");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
670
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
671 ### Initialize the hash data.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
672 $$href{-TOTAL} = 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
673 $$href{-NUM_TEXT_FILES} = $$href{-NUM_BINARY_FILES} = $$href{-NUM_DIRS} = 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
674 $$href{-T_FILE_NAMES} = [];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
675 $$href{-B_FILE_NAMES} = [];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
676 $$href{-DIR_NAMES} = [];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
677 while( <PIPE> ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
678 chomp();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
679 $$href{-TOTAL}++;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
680 if( -T $dir.$_ ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
681 $$href{-NUM_TEXT_FILES}++; push @{$$href{-T_FILE_NAMES}}, $_; }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
682 if( -B $dir.$_ and not -d $dir.$_) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
683 $$href{-NUM_BINARY_FILES}++; push @{$$href{-B_FILE_NAMES}}, $_; }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
684 if( -d $dir.$_ ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
685 $$href{-NUM_DIRS}++; push @{$$href{-DIR_NAMES}}, $_; }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
686 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
687 close PIPE;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
688
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
689 if( $print) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
690 printf( "\n%4d %s\n", $$href{-TOTAL}, "total files+dirs in $dir");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
691 printf( "%4d %s\n", $$href{-NUM_TEXT_FILES}, "text files");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
692 printf( "%4d %s\n", $$href{-NUM_BINARY_FILES}, "binary files");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
693 printf( "%4d %s\n", $$href{-NUM_DIRS}, "directories");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
694 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
695 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
696
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
697
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
698 #=head2 file_info
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
699 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
700 # Title : file_info
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
701 # Purpose : Obtains a variety of date for a given file.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
702 # : Provides an interface to Perl's stat().
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
703 # Status : Under development. Not ready. Don't use!
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
704 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
705 #=cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
706
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
707 #--------------
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
708 sub file_info {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
709 #--------------
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
710 my ($self, %param) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
711 my ($file, $get, $fmt) = $self->_rearrange([qw(FILE GET FMT)], %param);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
712 $get ||= 'all';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
713 $fmt ||= 'yyyy-mm-dd';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
714
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
715 my($dev, $ino, $mode, $nlink, $uid, $gid, $rdev, $size,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
716 $atime, $mtime, $ctime, $blksize, $blocks) = stat $file;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
717
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
718 if($get =~ /date/i) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
719 ## I can get the elapsed time since the file was modified but
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
720 ## it's not so straightforward to get the date in a nice format...
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
721 ## Think about using a standard CPAN module for this, like
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
722 ## Date::Manip or Date::DateCalc.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
723
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
724 my $date = $mtime;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
725 my $elsec = time - $mtime;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
726 printf "\nFile age: %.0f sec %.0f hrs %.0f days", $elsec, $elsec/3600, $elsec/(3600*24);<STDIN>;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
727 my $days = sprintf "%.0f", $elsec/(3600*24);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
728 } elsif($get eq 'all') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
729 return stat $file;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
730 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
731 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
732
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
733
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
734 #------------
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
735 sub delete {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
736 #------------
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
737 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
738 my $fileName = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
739 if(not -e $fileName) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
740 $self->throw("Can't delete file $fileName: Does not exist.");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
741 } elsif(not -o $fileName) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
742 $self->throw("Can't delete file $fileName: Not owner.");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
743 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
744 my $ulval = unlink($fileName) > 0 or
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
745 $self->throw("Failed to delete file $fileName: $!");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
746 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
747
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
748
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
749 =head2 create_filehandle
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
750
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
751 Usage : $object->create_filehandle(<named parameters>);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
752 Purpose : Create a FileHandle object from a file or STDIN.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
753 : Mainly used as a helper method by read() and get_newline().
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
754 Example : $data = $object->create_filehandle(-FILE =>'usr/people/me/data.txt')
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
755 Argument : Named parameters (case-insensitive):
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
756 : (all optional)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
757 : -CLIENT => object reference for the object submitting
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
758 : the request. This facilitates use by
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
759 : Bio::Root::IOManager::read(). Default = $Util.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
760 : -FILE => string (full path to file) or a reference
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
761 : to a FileHandle object or typeglob. This is an
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
762 : optional parameter (if not defined, STDIN is used).
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
763 Returns : Reference to a FileHandle object.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
764 Throws : Exception if cannot open a supplied file or if supplied with a
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
765 : reference that is not a FileHandle ref.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
766 Comments : If given a FileHandle reference, this method simply returns it.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
767 : This method assumes the user wants to read ascii data. So, if
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
768 : the file is binary, it will be treated as a compressed (gzipped)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
769 : file and access it using gzip -ce. The problem here is that not
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
770 : all binary files are necessarily compressed. Therefore,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
771 : this method should probably have a -mode parameter to
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
772 : specify ascii or binary.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
773
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
774 See Also : L<get_newline>(), L<Bio::Root::IOManager::read>(),
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
775
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
776 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
777
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
778 #---------------------
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
779 sub create_filehandle {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
780 #---------------------
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
781 my($self, @param) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
782 my($client, $file, $handle) =
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
783 $self->_rearrange([qw( CLIENT FILE HANDLE )], @param);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
784
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
785 if(not ref $client) { $client = $self; }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
786 $file ||= $handle;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
787 if( $client->can('file')) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
788 $file = $client->file($file);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
789 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
790
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
791 my $FH; # = new FileHandle;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
792
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
793 my ($handle_ref);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
794
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
795 if($handle_ref = ref($file)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
796 if($handle_ref eq 'FileHandle') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
797 $FH = $file;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
798 $client->{'_input_type'} = "FileHandle";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
799 } elsif($handle_ref eq 'GLOB') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
800 $FH = $file;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
801 $client->{'_input_type'} = "Glob";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
802 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
803 $self->throw("Can't read from $file: Not a FileHandle or GLOB ref.");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
804 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
805 $self->verbose > 0 and printf STDERR "$ID: reading data from FileHandle\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
806
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
807 } elsif($file) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
808 $client->{'_input_type'} = "FileHandle for $file";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
809
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
810 # Use gzip -cd to access compressed data.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
811 if( -B $file ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
812 $client->{'_input_type'} .= " (compressed)";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
813 $file = "${GNU_PATH}gzip -cd $file |"
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
814 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
815
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
816 $FH = new FileHandle;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
817 open ($FH, $file) || $self->throw("Can't access data file: $file",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
818 "$!");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
819 $self->verbose > 0 and printf STDERR "$ID: reading data from file $file\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
820
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
821 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
822 # Read from STDIN.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
823 $FH = \*STDIN;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
824 $self->verbose > 0 and printf STDERR "$ID: reading data from STDIN\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
825 $client->{'_input_type'} = "STDIN";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
826 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
827
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
828 return $FH;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
829 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
830
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
831 =head2 get_newline
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
832
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
833 Usage : $object->get_newline(<named parameters>);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
834 Purpose : Determine the character(s) used for newlines in a given file or
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
835 : input stream. Delegates to Bio::Root::Utilities::get_newline()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
836 Example : $data = $object->get_newline(-CLIENT => $anObj,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
837 : -FILE =>'usr/people/me/data.txt')
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
838 Argument : Same arguemnts as for create_filehandle().
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
839 Returns : Reference to a FileHandle object.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
840 Throws : Propogates and exceptions thrown by Bio::Root::Utilities::get_newline().
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
841
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
842 See Also : L<taste_file>(), L<create_filehandle>()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
843
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
844 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
845
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
846 #-----------------
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
847 sub get_newline {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
848 #-----------------
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
849 my($self, @param) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
850
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
851 return $NEWLINE if defined $NEWLINE;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
852
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
853 my($client ) =
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
854 $self->_rearrange([qw( CLIENT )], @param);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
855
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
856 my $FH = $self->create_filehandle(@param);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
857
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
858 if(not ref $client) { $client = $self; }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
859
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
860 if($client->{'_input_type'} =~ /STDIN|Glob|compressed/) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
861 # Can't taste from STDIN since we can't seek 0 on it.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
862 # Are other non special Glob refs seek-able?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
863 # Attempt to guess newline based on platform.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
864 # Not robust since we could be reading Unix files on a Mac, e.g.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
865 if(defined $ENV{'MACPERL'}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
866 $NEWLINE = "\015"; # \r
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
867 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
868 $NEWLINE = "\012"; # \n
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
869 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
870 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
871 $NEWLINE = $self->taste_file($FH);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
872 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
873
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
874 close ($FH) unless ($client->{'_input_type'} eq 'STDIN' ||
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
875 $client->{'_input_type'} eq 'FileHandle' ||
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
876 $client->{'_input_type'} eq 'Glob' );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
877
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
878 delete $client->{'_input_type'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
879
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
880 return $NEWLINE || $DEFAULT_NEWLINE;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
881 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
882
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
883
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
884 =head2 taste_file
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
885
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
886 Usage : $object->taste_file( <FileHandle> );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
887 : Mainly a utility method for get_newline().
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
888 Purpose : Sample a filehandle to determine the character(s) used for a newline.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
889 Example : $char = $Util->taste_file($FH)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
890 Argument : Reference to a FileHandle object.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
891 Returns : String containing an octal represenation of the newline character string.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
892 : Unix = "\012" ("\n")
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
893 : Win32 = "\012\015" ("\r\n")
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
894 : Mac = "\015" ("\r")
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
895 Throws : Exception if no input is read within $TIMEOUT_SECS seconds.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
896 : Exception if argument is not FileHandle object reference.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
897 : Warning if cannot determine neewline char(s).
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
898 Comments : Based on code submitted by Vicki Brown (vlb@deltagen.com).
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
899
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
900 See Also : L<get_newline>()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
901
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
902 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
903
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
904 #---------------
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
905 sub taste_file {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
906 #---------------
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
907 my ($self, $FH) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
908 my $BUFSIZ = 256; # Number of bytes read from the file handle.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
909 my ($buffer, $octal, $str, $irs, $i);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
910 my $wait = $TIMEOUT_SECS;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
911
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
912 ref($FH) eq 'FileHandle' or $self->throw("Can't taste file: not a FileHandle ref");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
913
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
914 $buffer = '';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
915
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
916 # this is a quick hack to check for availability of alarm(); just copied
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
917 # from Bio/Root/IOManager.pm HL 02/19/01
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
918 my $alarm_available = 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
919 eval {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
920 alarm(0);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
921 };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
922 if($@) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
923 # alarm() not available (ActiveState perl for win32 doesn't have it.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
924 # See jitterbug PR#98)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
925 $alarm_available = 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
926 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
927 $SIG{ALRM} = sub { die "Timed out!"; };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
928 my $result;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
929 eval {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
930 $alarm_available && alarm( $wait );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
931 $result = read($FH, $buffer, $BUFSIZ); # read the $BUFSIZ characters of file
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
932 $alarm_available && alarm(0);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
933 };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
934 if($@ =~ /Timed out!/) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
935 $self->throw("Timed out while waiting for input.",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
936 "Timeout period = $wait seconds.\nFor longer time before timing out, edit \$TIMEOUT_SECS in Bio::Root::Global.pm.");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
937
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
938 } elsif(not $result) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
939 my $err = $@;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
940 $self->throw("read taste failed to read from FileHandle.", $err);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
941
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
942 } elsif($@ =~ /\S/) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
943 my $err = $@;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
944 $self->throw("Unexpected error during read: $err");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
945 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
946
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
947 seek($FH, 0, 0) or $self->throw("seek failed to seek 0 on FileHandle.");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
948
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
949 my @chars = split(//, $buffer);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
950
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
951 for ($i = 0; $i <$BUFSIZ; $i++) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
952 if (($chars[$i] eq "\012")) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
953 unless ($chars[$i-1] eq "\015") {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
954 # Unix
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
955 $octal = "\012";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
956 $str = '\n';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
957 $irs = "^J";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
958 last;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
959 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
960 } elsif (($chars[$i] eq "\015") && ($chars[$i+1] eq "\012")) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
961 # DOS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
962 $octal = "\015\012";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
963 $str = '\r\n';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
964 $irs = "^M^J";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
965 last;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
966 } elsif (($chars[$i] eq "\015")) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
967 # Mac
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
968 $octal = "\015";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
969 $str = '\r';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
970 $irs = "^M";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
971 last;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
972 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
973 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
974 if (not $octal) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
975 $self->warn("Could not determine newline char. Using '\012'");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
976 $octal = "\012";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
977 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
978 # print STDERR "NEWLINE CHAR = $irs\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
979 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
980 return($octal);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
981 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
982
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
983 ######################################
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
984 ##### Mail Functions ########
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
985 ######################################
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
986
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
987 =head2 mail_authority
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
988
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
989 Title : mail_authority
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
990 Usage : $Util->mail_authority( $message )
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
991 Purpose : Syntactic sugar to send email to $Bio::Root::Global::AUTHORITY
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
992
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
993 See Also : L<send_mail>()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
994
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
995 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
996
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
997 sub mail_authority {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
998
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
999 my( $self, $message ) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1000 my $script = $self->untaint($0,1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1001
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1002 send_mail( -TO=>$AUTHORITY, -SUBJ=>$script, -MSG=>$message);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1003
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1004 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1005
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1006
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1007 =head2 send_mail
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1008
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1009 Title : send_mail
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1010 Usage : $Util->send_mail( named_parameters )
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1011 Purpose : Provides an interface to /usr/lib/sendmail
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1012 Returns : n/a
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1013 Argument : Named parameters: (case-insensitive)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1014 : -TO => e-mail address to send to
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1015 : -SUBJ => subject for message (optional)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1016 : -MSG => message to be sent (optional)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1017 : -CC => cc: e-mail address (optional)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1018 Thows : Exception if TO: address appears bad or is missing
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1019 Comments : Based on TomC's tip at:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1020 : http://www.perl.com/CPAN-local/doc/FMTEYEWTK/safe_shellings
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1021 :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1022 : Using default 'From:' information.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1023 : sendmail options used:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1024 : -t: ignore the address given on the command line and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1025 : get To:address from the e-mail header.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1026 : -oi: prevents send_mail from ending the message if it
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1027 : finds a period at the start of a line.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1028
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1029 See Also : L<mail_authority>()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1030
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1031 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1032
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1033
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1034 #-------------'
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1035 sub send_mail {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1036 #-------------
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1037 my( $self, @param) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1038 my($recipient,$subj,$message,$cc) = $self->_rearrange([qw(TO SUBJ MSG CC)],@param);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1039
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1040 $self->throw("Invalid or missing e-mail address: $recipient")
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1041 if not $recipient =~ /\S+\@\S+/;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1042
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1043 $cc ||= ''; $subj ||= ''; $message ||= '';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1044
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1045 open (SENDMAIL, "|/usr/lib/sendmail -oi -t") ||
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1046 $self->throw("Can't send mail: sendmail cannot fork: $!");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1047
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1048 print SENDMAIL <<QQ_EOF_QQ;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1049 To: $recipient
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1050 Subject: $subj
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1051 Cc: $cc
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1052
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1053 $message
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1054
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1055 QQ_EOF_QQ
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1056
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1057 close(SENDMAIL);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1058 if ($?) { warn "sendmail didn't exit nicely: $?" }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1059 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1060
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1061
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1062 ######################################
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1063 ### Interactive Functions #####
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1064 ######################################
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1065
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1066
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1067 =head2 yes_reply
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1068
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1069 Title : yes_reply()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1070 Usage : $Util->yes_reply( [query_string]);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1071 Purpose : To test an STDIN input value for affirmation.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1072 Example : print +( $Util->yes_reply('Are you ok') ? "great!\n" : "sorry.\n" );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1073 : $Util->yes_reply('Continue') || die;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1074 Returns : Boolean, true (1) if input string begins with 'y' or 'Y'
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1075 Argument: query_string = string to be used to prompt user (optional)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1076 : If not provided, 'Yes or no' will be used.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1077 : Question mark is automatically appended.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1078
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1079 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1080
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1081 #-------------
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1082 sub yes_reply {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1083 #-------------
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1084 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1085 my $query = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1086 my $reply;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1087 $query ||= 'Yes or no';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1088 print "\n$query? (y/n) [n] ";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1089 chomp( $reply = <STDIN> );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1090 $reply =~ /^y/i;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1091 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1092
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1093
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1094
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1095 =head2 request_data
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1096
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1097 Title : request_data()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1098 Usage : $Util->request_data( [value_name]);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1099 Purpose : To request data from a user to be entered via keyboard (STDIN).
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1100 Example : $name = $Util->request_data('Name');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1101 : # User will see: % Enter Name:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1102 Returns : String, (data entered from keyboard, sans terminal newline.)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1103 Argument: value_name = string to be used to prompt user.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1104 : If not provided, 'data' will be used, (not very helpful).
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1105 : Question mark is automatically appended.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1106
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1107 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1108
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1109 #----------------
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1110 sub request_data {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1111 #----------------
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1112 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1113 my $data = shift || 'data';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1114 print "Enter $data: ";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1115 # Remove the terminal newline char.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1116 chomp($data = <STDIN>);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1117 $data;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1118 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1119
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1120 sub quit_reply {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1121 # Not much used since you can use request_data()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1122 # and test for an empty string.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1123 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1124 my $reply;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1125 chop( $reply = <STDIN> );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1126 $reply =~ /^q.*/i;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1127 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1128
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1129
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1130 =head2 verify_version
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1131
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1132 Purpose : Checks the version of Perl used to invoke the script.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1133 : Aborts program if version is less than the given argument.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1134 Usage : verify_version('5.000')
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1135
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1136 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1137
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1138 #------------------
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1139 sub verify_version {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1140 #------------------
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1141 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1142 my $reqVersion = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1143
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1144 $] < $reqVersion and do {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1145 printf STDERR ( "\a\n%s %0.3f.\n", "** Sorry. This Perl script requires at least version", $reqVersion);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1146 printf STDERR ( "%s %0.3f %s\n\n", "You are running Perl version", $], "Please update your Perl!\n\n" );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1147 exit(1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1148 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1149 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1150
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1151 # Purpose : Returns a string that can be used as a temporary file name.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1152 # Based on localtime.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1153 # This is used if POSIX is not available.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1154
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1155 sub _get_pseudo_tmpnam {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1156
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1157 my $date = localtime(time());
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1158
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1159 my $tmpnam = 'tmpnam';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1160
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1161 if( $date =~ /([\d:]+)\s+(\d+)\s*$/ ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1162 $tmpnam = $2. '_' . $1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1163 $tmpnam =~ s/:/_/g;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1164 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1165 return $tmpnam;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1166 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1167
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1168
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1169 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1170 __END__
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1171
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1172 MODIFICATION NOTES:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1173 ---------------------
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1174
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1175 17 Feb 1999, sac:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1176 * Using global $TIMEOUT_SECS in taste_file().
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1177
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1178 13 Feb 1999, sac:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1179 * Renamed get_newline_char() to get_newline() since it could be >1 char.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1180
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1181 3 Feb 1999, sac:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1182 * Added three new methods: create_filehandle, get_newline_char, taste_file.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1183 create_filehandle represents functionality that was formerly buried
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1184 within Bio::Root::IOManager::read().
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1185
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1186 2 Dec 1998, sac:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1187 * Removed autoloading code.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1188 * Modified compress(), uncompress(), and delete() to properly
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1189 deal with file ownership issues.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1190
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1191 3 Jun 1998, sac:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1192 * Improved file_date() to be less reliant on the output of ls.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1193 (Note the word 'less'; it still relies on ls).
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1194
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1195 5 Jul 1998, sac:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1196 * compress() & uncompress() will write files to a temporary location
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1197 if the first attempt to compress/uncompress fails.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1198 This allows users to access compressed files in directories in which they
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1199 lack write permission.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1200
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1201
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1202