annotate variant_effect_predictor/Bio/EnsEMBL/Utils/IO.pm @ 0:1f6dce3d34e0

Uploaded
author mahtabm
date Thu, 11 Apr 2013 02:01:53 -0400
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1 package Bio::EnsEMBL::Utils::IO;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
3 =pod
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
4
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
5 =head1 LICENSE
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
6
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
7 Copyright (c) 1999-2012 The European Bioinformatics Institute and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
8 Genome Research Limited. All rights reserved.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
9
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
10 This software is distributed under a modified Apache license.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
11 For license details, please see
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
12
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
13 http://www.ensembl.org/info/about/code_licence.html
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
14
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
15 =head1 CONTACT
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
16
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
17 Please email comments or questions to the public Ensembl
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
18 developers list at <dev@ensembl.org>.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
19
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
20 Questions may also be sent to the Ensembl help desk at
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
21 <helpdesk@ensembl.org>.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
22
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
23 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
24
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
25 =pod
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
26
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
27 =head1 NAME
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
28
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
29 Bio::EnsEMBL::Utils::IO
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
30
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
31 =head1 SYNOPSIS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
32
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
33 use Bio::EnsEMBL::Utils::IO qw/slurp work_with_file slurp_to_array fh_to_array/;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
34 #or
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
35 # use Bio::EnsEMBL::Utils::IO qw/:slurp/; #brings in any method starting with slurp
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
36 # use Bio::EnsEMBL::Utils::IO qw/:array/; #brings in any method which ends with _array
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
37 # use Bio::EnsEMBL::Utils::IO qw/:gz/; #brings all methods which start with gz_
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
38 # use Bio::EnsEMBL::Utils::IO qw/:all/; #brings all methods in
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
39
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
40 #As a scalar
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
41 my $file_contents = slurp('/my/file/location.txt');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
42 print length($file_contents);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
43
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
44 #As a ref
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
45 my $file_contents_ref = slurp('/my/file/location.txt', 1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
46 print length($$file_contents_ref);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
47
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
48 #Sending it to an array
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
49 my $array = slurp_to_array('/my/location');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
50 work_with_file('/my/location', 'r', sub {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
51 $array = process_to_array($_[0], sub {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
52 #Gives us input line by line
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
53 return "INPUT: $_";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
54 });
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
55 });
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
56
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
57 #Simplified vesion but without the post processing
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
58 $array = fh_to_array($fh);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
59
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
60 #Sending this back out to another file
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
61 work_with_file('/my/file/newlocation.txt', 'w', sub {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
62 my ($fh) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
63 print $fh $$file_contents_ref;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
64 return;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
65 });
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
66
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
67 #Gzipping the data to another file
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
68 gz_work_with_file('/my/file.gz', 'w', sub {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
69 my ($fh) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
70 print $fh $$file_contents_ref;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
71 return;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
72 });
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
73
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
74 #Working with a set of lines manually
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
75 work_with_file('/my/file', 'r', sub {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
76 my ($fh) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
77 iterate_lines($fh, sub {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
78 my ($line) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
79 print $line; #Send the line in the file back out
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
80 return;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
81 });
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
82 return;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
83 });
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
84
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
85 #Doing the same in one go
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
86 iterate_file('/my/file', sub {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
87 my ($line) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
88 print $line; #Send the line in the file back out
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
89 return;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
90 });
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
91
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
92 #Move all data from one file handle to another. Bit like a copy
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
93 move_data($src_fh, $trg_fh);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
94
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
95 =head1 DESCRIPTION
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
96
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
97 A collection of subroutines aimed to helping IO based operations
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
98
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
99 =head1 METHODS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
100
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
101 See subroutines.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
102
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
103 =head1 MAINTAINER
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
104
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
105 $Author: ady $
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
106
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
107 =head1 VERSION
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
108
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
109 $Revision: 1.10 $
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
110
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
111 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
112
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
113 use strict;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
114 use warnings;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
115
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
116 use base qw(Exporter);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
117
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
118 our $GZIP_OK = 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
119 our @EXPORT_OK = qw/slurp slurp_to_array fh_to_array process_to_array work_with_file gz_slurp gz_slurp_to_array gz_work_with_file iterate_file iterate_lines move_data/;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
120 our %EXPORT_TAGS = (
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
121 all => [@EXPORT_OK],
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
122 slurp => [qw/slurp slurp_to_array gz_slurp gz_slurp_to_array/],
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
123 array => [qw/fh_to_array process_to_array slurp_to_array gz_slurp_to_array/],
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
124 gz => [qw/gz_slurp gz_slurp_to_array gz_work_with_file/],
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
125 iterate => [qw/iterate_file iterate_lines/],
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
126 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
127 use Bio::EnsEMBL::Utils::Exception qw(throw);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
128 use Bio::EnsEMBL::Utils::Scalar qw(:assert);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
129 use IO::File;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
130 eval {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
131 require IO::Compress::Gzip;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
132 require IO::Uncompress::Gunzip;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
133 $GZIP_OK = 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
134 };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
135
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
136 =head2 slurp()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
137
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
138 Arg [1] : string $file
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
139 Arg [2] : boolean; $want_ref
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
140 Arg [3] : boolean; $binary
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
141 Indicates if we want to return a scalar reference
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
142 Description : Forces the contents of a file into a scalar. This is the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
143 fastest way to get a file into memory in Perl. You can also
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
144 get a scalar reference back to avoid copying the file contents
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
145 in Scalar references. If the input file is binary then specify
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
146 with the binary flag
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
147 Returntype : Scalar or reference of the file contents depending on arg 2
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
148 Example : my $contents = slurp('/tmp/file.txt');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
149 Exceptions : If the file did not exist or was not readable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
150 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
151
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
152 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
153
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
154 sub slurp {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
155 my ($file, $want_ref, $binary) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
156 my $contents = q{};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
157 work_with_file($file, 'r', sub {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
158 my ($fh) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
159 binmode($fh) if $binary;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
160 my $size_left = -s $file;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
161 while( $size_left > 0 ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
162 my $read_cnt = sysread($fh, $contents, $size_left, length($contents));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
163 unless( $read_cnt ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
164 throw "read error in file $file: $!" ;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
165 last;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
166 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
167 $size_left -= $read_cnt ;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
168 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
169 return;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
170 });
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
171 return ($want_ref) ? \$contents : $contents;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
172 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
173
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
174 =head2 gz_slurp()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
175
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
176 Arg [1] : string $file
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
177 Arg [2] : boolean; $want_ref Indicates if we want to return a scalar reference
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
178 Arg [3] : boolean; $binary
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
179 Arg [4] : HashRef arguments to pass into IO compression layers
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
180 Description : Forces the contents of a file into a scalar. This is the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
181 fastest way to get a file into memory in Perl. You can also
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
182 get a scalar reference back to avoid copying the file contents
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
183 in Scalar references. If the input file is binary then specify
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
184 with the binary flag
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
185 Returntype : Scalar or reference of the file contents depending on arg 2
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
186 Example : my $contents = slurp('/tmp/file.txt.gz');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
187 Exceptions : If the file did not exist or was not readable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
188 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
189
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
190 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
191
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
192 sub gz_slurp {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
193 my ($file, $want_ref, $binary, $args) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
194 my $contents;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
195 gz_work_with_file($file, 'r', sub {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
196 my ($fh) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
197 local $/ = undef;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
198 binmode($fh) if $binary;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
199 $contents = <$fh>;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
200 return;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
201 }, $args);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
202 return ($want_ref) ? \$contents : $contents;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
203 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
204
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
205 =head2 slurp_to_array()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
206
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
207 Arg [1] : string $file
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
208 Arg [2] : boolean $chomp
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
209 Description : Sends the contents of the given file into an ArrayRef
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
210 Returntype : ArrayRef
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
211 Example : my $contents_array = slurp_to_array('/tmp/file.txt');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
212 Exceptions : If the file did not exist or was not readable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
213 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
214
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
215 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
216
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
217 sub slurp_to_array {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
218 my ($file, $chomp) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
219 my $contents;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
220 work_with_file($file, 'r', sub {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
221 my ($fh) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
222 $contents = fh_to_array($fh, $chomp);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
223 return;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
224 });
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
225 return $contents;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
226 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
227
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
228 =head2 gz_slurp_to_array()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
229
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
230 Arg [1] : string $file
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
231 Arg [2] : boolean $chomp
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
232 Arg [3] : HashRef arguments to pass into IO compression layers
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
233 Description : Sends the contents of the given gzipped file into an ArrayRef
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
234 Returntype : ArrayRef
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
235 Example : my $contents_array = slurp_to_array('/tmp/file.txt.gz');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
236 Exceptions : If the file did not exist or was not readable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
237 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
238
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
239 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
240
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
241 sub gz_slurp_to_array {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
242 my ($file, $chomp, $args) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
243 my $contents;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
244 gz_work_with_file($file, 'r', sub {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
245 my ($fh) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
246 $contents = fh_to_array($fh, $chomp);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
247 return;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
248 }, $args);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
249 return $contents;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
250 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
251
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
252 =head2 fh_to_array()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
253
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
254 Arg [1] : Glob/IO::Handle $fh
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
255 Arg [2] : boolean $chomp
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
256 Description : Sends the contents of the given filehandle into an ArrayRef.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
257 Will perform chomp on each line if specified. If you require
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
258 any more advanced line based processing then see
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
259 L<process_to_array>.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
260 Returntype : ArrayRef
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
261 Example : my $contents_array = fh_to_array($fh);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
262 Exceptions : None
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
263 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
264
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
265 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
266
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
267 sub fh_to_array {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
268 my ($fh, $chomp) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
269 if($chomp) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
270 return process_to_array($fh, sub {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
271 my ($line) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
272 chomp($line);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
273 return $line;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
274 });
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
275 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
276 my @contents = <$fh>;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
277 return \@contents;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
278 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
279
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
280 =head2 process_to_array
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
281
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
282 Arg [1] : Glob/IO::Handle $fh
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
283 Arg [2] : CodeRef $callback
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
284 Description : Sends the contents of the given file handle into an ArrayRef
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
285 via the processing callback. Assumes line based input.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
286 Returntype : ArrayRef
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
287 Example : my $array = process_to_array($fh, sub { return "INPUT: $_"; });
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
288 Exceptions : If the fh did not exist or if a callback was not given.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
289 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
290
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
291 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
292
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
293 sub process_to_array {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
294 my ($fh, $callback) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
295 assert_file_handle($fh, 'FileHandle');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
296 assert_ref($callback, 'CODE', 'callback');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
297 my @contents;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
298 iterate_lines($fh, sub {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
299 my ($line) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
300 push(@contents, $callback->($line));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
301 return;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
302 });
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
303 return \@contents;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
304 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
305
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
306 =head2 iterate_lines
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
307
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
308 Arg [1] : Glob/IO::Handle $fh
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
309 Arg [2] : CodeRef $callback
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
310 Description : Iterates through each line from the given file handle and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
311 hands them to the callback one by one
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
312 Returntype : None
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
313 Example : iterate_lines($fh, sub { print "INPUT: $_"; });
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
314 Exceptions : If the fh did not exist or if a callback was not given.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
315 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
316
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
317 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
318
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
319 sub iterate_lines {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
320 my ($fh, $callback) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
321 assert_file_handle($fh, 'FileHandle');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
322 assert_ref($callback, 'CODE', 'callback');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
323 while( my $line = <$fh> ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
324 $callback->($line);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
325 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
326 return;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
327 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
328
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
329 =head2 iterate_file
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
330
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
331 Arg [1] : string $file
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
332 Arg [3] : CodeRef the callback which is used to iterate the lines in
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
333 the file
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
334 Description : Iterates through each line from the given file and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
335 hands them to the callback one by one
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
336 Returntype : None
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
337 Example : iterate_file('/my/file', sub { print "INPUT: $_"; });
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
338 Exceptions : If the file did not exist or if a callback was not given.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
339 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
340
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
341 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
342
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
343
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
344 sub iterate_file {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
345 my ($file, $callback) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
346 work_with_file($file, 'r', sub {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
347 my ($fh) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
348 iterate_lines($fh, $callback);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
349 return;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
350 });
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
351 return;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
352 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
353
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
354
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
355
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
356 =head2 work_with_file()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
357
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
358 Arg [1] : string $file
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
359 Arg [2] : string; $mode
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
360 Supports all modes specified by the C<open()> function as well as those
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
361 supported by IO::File
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
362 Arg [3] : CodeRef the callback which is given the open file handle as
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
363 its only argument
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
364 Description : Performs the nitty gritty of checking if a file handle is open
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
365 and closing the resulting filehandle down.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
366 Returntype : None
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
367 Example : work_with_file('/tmp/out.txt', 'w', sub {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
368 my ($fh) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
369 print $fh 'hello';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
370 return;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
371 });
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
372 Exceptions : If we could not work with the file due to permissions
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
373 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
374
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
375 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
376
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
377 sub work_with_file {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
378 my ($file, $mode, $callback) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
379 throw "We need a file name to open" if ! $file;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
380 throw "We need a mode to open the requested file with" if ! $mode;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
381 assert_ref($callback, 'CODE', 'callback');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
382 my $fh = IO::File->new($file, $mode) or
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
383 throw "Cannot open '${file}' in mode '${mode}': $!";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
384 $callback->($fh);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
385 close($fh) or throw "Cannot close FH from ${file}: $!";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
386 return;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
387 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
388
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
389 =head2 gz_work_with_file()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
390
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
391 Arg [1] : string $file
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
392 Arg [2] : string; $mode
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
393 Supports modes like C<r>, C<w>, C<\>> and C<\<>
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
394 Arg [3] : CodeRef the callback which is given the open file handle as
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
395 its only argument
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
396 Arg [4] : HashRef used to pass options into the IO
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
397 compression/uncompression modules
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
398 Description : Performs the nitty gritty of checking if a file handle is open
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
399 and closing the resulting filehandle down.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
400 Returntype : None
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
401 Example : work_with_file('/tmp/out.txt.gz', 'w', sub {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
402 my ($fh) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
403 print $fh 'hello';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
404 return;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
405 });
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
406 Exceptions : If we could not work with the file due to permissions
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
407 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
408
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
409 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
410
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
411 sub gz_work_with_file {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
412 my ($file, $mode, $callback, $args) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
413 throw "IO::Compress was not available"if ! $GZIP_OK;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
414 throw "We need a file name to open" if ! $file;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
415 throw "We need a mode to open the requested file with" if ! $mode;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
416 assert_ref($callback, 'CODE', 'callback');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
417 $args ||= {};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
418
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
419 my $fh;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
420 {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
421 no warnings qw/once/;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
422 if($mode =~ '>$' || $mode eq 'w') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
423 $args->{Append} = 1 if $mode =~ />>$/;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
424 $fh = IO::Compress::Gzip->new($file, %$args) or throw "Cannot open '$file' for writing: $IO::Compress::Gzip::GzipError";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
425 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
426 elsif($mode eq '<' || $mode eq 'r') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
427 $fh = IO::Uncompress::Gunzip->new($file, %$args) or throw "Cannot open '$file' for writing: $IO::Uncompress::Gunzip::GunzipError";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
428 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
429 else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
430 throw "Could not decipher a mode from '$mode'";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
431 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
432 };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
433 $callback->($fh);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
434 close($fh) or throw "Cannot close FH from ${file}: $!";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
435 return;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
436 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
437
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
438 =head2 move_data
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
439
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
440 Arg [1] : FileHandle $src_fh
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
441 Arg [2] : FileHandle $trg_fh
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
442 Arg [3] : int $buffer. Defaults to 8KB
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
443 Description : Moves data from the given source filehandle to the target one
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
444 using a 8KB buffer or user specified buffer
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
445 Returntype : None
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
446 Example : move_data($src_fh, $trg_fh, 16*1024); # copy in 16KB chunks
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
447 Exceptions : If inputs were not as expected
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
448
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
449 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
450
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
451 sub move_data {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
452 my ($src_fh, $trg_fh, $buffer_size) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
453 assert_file_handle($src_fh, 'SourceFileHandle');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
454 assert_file_handle($trg_fh, 'TargetFileHandle');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
455
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
456 $buffer_size ||= 8192; #Default 8KB
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
457 my $buffer;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
458 while(1) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
459 my $read = sysread($src_fh, $buffer, $buffer_size);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
460 if(! defined $read) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
461 throw "Error whilst reading from filehandle: $!";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
462 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
463 if($read == 0) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
464 last;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
465 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
466 my $written = syswrite($trg_fh, $buffer);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
467 if(!defined $written) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
468 throw "Error whilst writing to filehandle: $!";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
469 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
470 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
471 return;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
472 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
473
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
474 1;