annotate variant_effect_predictor/Bio/Root/Utilities.pm @ 0:2bc9b66ada89 draft default tip

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