Config-Simple
view release on metacpan or search on metacpan
$self->_is_modified(1);
}
$self->{_DATA}->{$block_name} = $processed_values;
$self->_is_modified(1);
}
sub set_param {
my ($self, $key, $value) = @_;
my $syntax = $self->{_SYNTAX} or die "'_SYNTAX' is not defined";
if ( ref($value) eq 'ARRAY' ) {
for (my $i=0; $i < @$value; $i++ ) {
$value->[$i] =~ s/\n/\\n/g;
}
} else {
$value =~ s/\n/\\n/g;
}
unless ( ref($value) eq 'ARRAY' ) {
$value = [$value];
}
$key = lcase($key);
# If it was an ini syntax, we should first split the $key
# into its block_name and key components
if ( $syntax eq 'ini' ) {
my ($bn, $k) = $key =~ m/^([^\.]+)\.(.*)$/;
if ( $bn && $k ) {
$self->_is_modified(1);
return $self->{_DATA}->{$bn}->{$k} = $value;
}
# most likely the user is assuming default name space then?
# Let's hope!
$self->_is_modified(1);
return $self->{_DATA}->{$DEFAULTNS}->{$key} = $value;
}
$self->_is_modified(1);
return $self->{_DATA}->{$key} = $value;
}
sub write {
my ($self, $file) = @_;
$file ||= $self->{_FILE_NAME} or die "Neither '_FILE_NAME' nor \$filename defined";
unless ( sysopen(FH, $file, O_WRONLY|O_CREAT, 0666) ) {
$self->error("'$file' couldn't be opened for writing: $!");
return undef;
}
unless ( flock(FH, LOCK_EX) ) {
$self->error("'$file' couldn't be locked: $!");
return undef;
}
unless ( truncate(FH, 0) ) {
$self->error("'$file' couldn't be truncated: $!");
return undef;
}
print FH $self->as_string();
unless ( CORE::close(FH) ) {
$self->error("Couldn't write into '$file': $!");
return undef;
}
return 1;
}
sub save {
my $self = shift;
return $self->write(@_);
}
# generates a writable string
sub as_string {
my $self = shift;
my $syntax = $self->{_SYNTAX} or die "'_SYNTAX' is not defined";
my $sub_syntax = $self->{_SUB_SYNTAX} || '';
my $currtime = localtime;
my $STRING = undef;
if ( $syntax eq 'ini' ) {
$STRING .= "; Config::Simple $VERSION\n";
$STRING .= "; $currtime\n\n";
while ( my ($block_name, $key_values) = each %{$self->{_DATA}} ) {
unless ( $sub_syntax eq 'simple-ini' ) {
$STRING .= sprintf("[%s]\n", $block_name);
}
while ( my ($key, $value) = each %{$key_values} ) {
my $values = join (WRITE_DELIM, map { quote_values($_) } @$value);
$STRING .= sprintf("%s=%s\n", $key, $values );
}
$STRING .= "\n";
}
} elsif ( $syntax eq 'http' ) {
$STRING .= "# Config::Simple $VERSION\n";
$STRING .= "# $currtime\n\n";
while ( my ($key, $value) = each %{$self->{_DATA}} ) {
my $values = join (WRITE_DELIM, map { quote_values($_) } @$value);
$STRING .= sprintf("%s: %s\n", $key, $values);
}
} elsif ( $syntax eq 'simple' ) {
$STRING .= "# Config::Simple $VERSION\n";
$STRING .= "# $currtime\n\n";
while ( my ($key, $value) = each %{$self->{_DATA}} ) {
my $values = join (WRITE_DELIM, map { quote_values($_) } @$value);
$STRING .= sprintf("%s %s\n", $key, $values);
}
}
$STRING .= "\n";
return $STRING;
( run in 2.851 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )