#!/usr/bin/perl -w # Copyright (C) 2002,2003 Mandrakesoft # # Author: Philippe Hetroy, phetroy@mandrakesoft.com # # $Id: Varspaceval.pm,v 1.5 2004-01-22 20:24:48 tvignaud Exp $ # Module for loding and committing informations in a VAR = value file type package MDK::Wizard::Varspaceval; use lib('./'); use strict; use Data::Dumper; # Get all useful content of the config file # Return a hash containg the key and the value # ATTENTION : in the conf file, an empty value is returnes as a spaced value (mandatory because of XML compatibility) sub get { my ($_self, $file) = @_; my %l; local *F; open F, $file or return; local $_; while () { my ($v, $val, $val2) = /^\s* # leading space (\w+)\s* # variable ( "(.*)" # double-quoted text | '(.*)' # single-quoted text | [^'"\s]* # normal text ) \s*$ # end of line /x; no warnings; $l{$v} = defined $val2 ? $val2 : $val; } %l; } # Commits changes in conf files and ifconfig sub commit { my ($_self, $file, $hash) = @_; local *F; my $output = ""; if (open(F, $file)) { local $_; while () { my ($pre, $key, $eq, $val, $rest) = /(^\s*)(\w+)(\s*"*'*)([^'"\s]*)(.*)/x; if (!defined $key) { $output .= $_; next; }; next if !exists $hash->{$key}; #Elt has been removed no warnings; $val = $hash->{$key}; delete $hash->{$key}; $output .= defined $val ? $pre . $key . $eq . $val . $rest . "\n" : $pre . $key . $eq . $val . $rest; # $output .= $pre . $key . $eq . $val . $rest . "\n"; } #appending added parameters foreach (keys %$hash) { $output .= $_ . " " . $hash->{$_} . "\n"; } } else { #the file does not exist print STDERR "File $file will be created\n"; foreach (keys %$hash) { $output .= defined $hash->{$_} ? $_ . "=" . $hash->{$_} . "\n" : $_ . "=\n"; } } #print $output; #print "\n------------------\n"; # outputing the new conf open(F, "> $file") or return; print F $output; close(F); } 1;