2 # Copyright 1999, 2000, 2001 Patrik Stridvall
4 # This library is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU Lesser General Public
6 # License as published by the Free Software Foundation; either
7 # version 2.1 of the License, or (at your option) any later version.
9 # This library is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 # Lesser General Public License for more details.
14 # You should have received a copy of the GNU Lesser General Public
15 # License along with this library; if not, write to the Free Software
16 # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
24 use vars
qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
29 append_file edit_file read_file replace_file
30 normalize_set is_subset
35 ########################################################################
38 sub _compare_files
($$) {
44 return -1 if !open(IN
, "< $file1");
48 return 1 if !open(IN
, "< $file2");
55 ########################################################################
58 sub append_file
($$@
) {
62 open(OUT
, ">> $filename") || die "Can't open file '$filename'";
63 my $result = &$function(\
*OUT
, @_);
69 ########################################################################
76 open(IN
, "< $filename") || die "Can't open file '$filename'";
77 open(OUT
, "> $filename.tmp") || die "Can't open file '$filename.tmp'";
79 my $result = &$function(\
*IN
, \
*OUT
, @_);
86 rename("$filename.tmp", "$filename");
88 unlink("$filename.tmp");
94 ########################################################################
101 open(IN
, "< $filename") || die "Can't open file '$filename'";
102 my $result = &$function(\
*IN
, @_);
108 ########################################################################
111 sub replace_file
($$@
) {
112 my $filename = shift;
113 my $function = shift;
115 open(OUT
, "> $filename.tmp") || die "Can't open file '$filename.tmp'";
117 my $result = &$function(\
*OUT
, @_);
121 if($result && _compare_files
($filename, "$filename.tmp")) {
123 rename("$filename.tmp", $filename);
125 unlink("$filename.tmp");
131 ########################################################################
134 sub normalize_set
($) {
142 foreach my $key (split(/\s*&\s*/)) {
146 return join(" & ", sort(keys(%hash)));
149 ########################################################################
156 foreach my $subitem (split(/ & /, $subset)) {
158 foreach my $item (split(/ & /, $set)) {
159 if($subitem eq $item) {