$ cat test.conf
fieldX:fieldY=123
fieldA:fieldB=234
$ cat t.pl
#!/usr/bin/perl
use warnings;
use strict;
{
package MyConfig;
use Tie::File;
sub new {
my ($class, $file) = @_;
tie(my @config, "Tie::File", $file)
or die("Failed to read ", $file, "\n ", $!);
return bless \@config, $class;
}
sub setting {
my $self = shift;
my $line = shift;
if (3 == grep { defined($_) } @_)
{
$self->[$line] = "$_[0]:$_[1]=$_[2]";
}
else
{
return split /[:=]/, $self->[$line];
}
}
sub DESTROY { untie @{ $_[0] } }
}
use Data::Dumper;
my $s = MyConfig->new("test.conf");
my @set1 = $s->setting(0); # at line 1
my @set2 = $s->setting(1); # at line 2
print Dumper \@set1, \@set2;
$s->setting(1, "foo", "bar", "777"); # modify line 2
$s->setting(4, "baz", "red", "999"); # add line 5
__END__
$ t.pl
$VAR1 = [
'fieldX',
'fieldY',
'123'
];
$VAR2 = [
'fieldA',
'fieldB',
'234'
];
$ cat test.conf
fieldX:fieldY=123
foo:bar=777
baz:red=999
|