File Coverage

blib/lib/Stem/Util.pm
Criterion Covered Total %
statement 6 29 20.6
branch 0 12 0.0
condition n/a
subroutine 2 5 40.0
pod 3 3 100.0
total 11 49 22.4


line stmt bran cond sub pod time code
1             # File: Stem/Util.pm
2              
3             # This file is part of Stem.
4             # Copyright (C) 1999, 2000, 2001 Stem Systems, Inc.
5              
6             # Stem is free software; you can redistribute it and/or modify
7             # it under the terms of the GNU General Public License as published by
8             # the Free Software Foundation; either version 2 of the License, or
9             # (at your option) any later version.
10              
11             # Stem is distributed in the hope that it will be useful,
12             # but WITHOUT ANY WARRANTY; without even the implied warranty of
13             # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14             # GNU General Public License for more details.
15              
16             # You should have received a copy of the GNU General Public License
17             # along with Stem; if not, write to the Free Software
18             # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19              
20             # For a license to use the Stem under conditions other than those
21             # described here, to purchase support for this software, or to purchase a
22             # commercial warranty contract, please contact Stem Systems at:
23              
24             # Stem Systems, Inc. 781-643-7504
25             # 79 Everett St. info@stemsystems.com
26             # Arlington, MA 02474
27             # USA
28              
29             package Stem::Util ;
30              
31 3     3   14 use strict ;
  3         4  
  3         92  
32 3     3   16 use Carp ;
  3         6  
  3         1435  
33              
34             =head1 Stem::Util
35              
36             This file includes two subroutines: read_file and write_file.
37              
38             =cut
39              
40             =head2 read_file
41              
42             read_file is a utility sub to slurp in a file.
43              
44             It returns a list of lines when called in list context.
45             It returns one big string when called in scalar context.
46              
47             =cut
48              
49             # utility sub to slurp in a file. list/scalar context determines either
50             # list of lines or long single string
51              
52             sub read_file {
53              
54 0     0 1   my( $file_name ) = shift ;
55              
56 0           local( *FH ) ;
57 0 0         open( FH, $file_name ) || carp "can't open $file_name $!" ;
58              
59 0 0         return if wantarray ;
60              
61 0           my $buf ;
62              
63 0           sysread( FH, $buf, -s FH ) ;
64 0           return $buf ;
65             }
66              
67             =head2 load_file
68              
69             load_file is a utility sub to load a file of data. It reads in a file
70             and converts it to an internal form according to the first line of the
71             file. The default file format is Perl data and eval is used to convert
72             it. These other formats are also supported:
73              
74             YAML
75              
76             =cut
77              
78             sub load_file {
79              
80 0     0 1   my( $file_name ) = shift ;
81              
82 0           my $text = read_file( $file_name ) ;
83              
84 0           my @load_vals ;
85              
86 0 0         if ( $text =~ /^.*#YAML/ ) {
87              
88 0           require YAML ;
89              
90 0           eval {
91 0           @load_vals = YAML::Load( $text ) ;
92             } ;
93              
94 0 0         return "Load error in file '$file_name' with YAML: $@" if $@ ;
95              
96             # lose the outer anon array wrapper and return the values
97              
98 0           return $load_vals[0] ;
99             }
100              
101 0           @load_vals = eval "($text)" ;
102              
103 0 0         return "Load error in file '$file_name' with eval: $@" if $@ ;
104 0           return \@load_vals ;
105             }
106              
107              
108             =head2 write_file
109              
110             write_sub is a utility sub to write a file. It takes a file
111             name and a list of strings. It opens the file and writes
112             all data passed into the file. This will overwrite any data
113             in the file.
114              
115             =cut
116              
117             # utility sub to write a file. takes a file name and a list of strings
118              
119             sub write_file {
120              
121 0     0 1   my( $file_name ) = shift ;
122              
123 0           local( *FH ) ;
124              
125 0 0         open( FH, ">$file_name" ) || carp "can't create $file_name $!" ;
126              
127 0           print FH @_ ;
128             }
129              
130             1 ;