Config-Writer
view release on metacpan or search on metacpan
lib/Config/Writer.pm view on Meta::CPAN
Default is 0600.
=back
=back
=cut #}}}
my $self = bless { 'error' => boolean::false }, __PACKAGE__;
my @filename = File::Basename::fileparse $filename, qw(.cfg .conf .json .yaml), '';
$self->{'filename'} = $filename[0];
$self->{'retain'} = (defined $options->{'retain'} and $options->{'retain'} =~ /^\d+$/)
? $options->{'retain'} + 0
: 0;
$self->{'overwrite'} = (defined $options->{'overwrite'} and $options->{'overwrite'} =~ /^1$/)
? boolean::true
: boolean::false;
$self->{'extension'} = (defined $options->{'extension'} and $options->{'extension'} !~ m|/|)
? $options->{'extension'}
: '-%Y-%m-%d';
$self->{'owner'} = defined $options->{'owner'}
? (getpwnam $options->{'owner'})[2]
: $>;
$self->{'group'} = defined $options->{'group'}
? (getpwnam $options->{'group'})[3]
: (getpwuid $self->{'owner'})[3];
$self->{'permissions'} = (defined $options->{'permissions'} and $options->{'permissions'} =~ /^\d+$/)
? $options->{'permissions'}
: 0600;
if ($filename =~ m|^/|) {
$self->{'workdir'} = Cwd::realpath((File::Basename::fileparse $filename)[1]);
} else {
$self->{'workdir'} = (defined $options->{'workdir'} and -d $options->{'workdir'})
? $options->{'workdir'}
: Cwd::getcwd;
$self->{'workdir'} = Cwd::realpath($self->{'workdir'} . '/' . $filename[1]);
}
unless (defined $self->{'workdir'}) {
$self->{'error'} = boolean::true;
return $self;
}
$self->{'fullname'} = $self->{'workdir'} . '/' . $self->{'filename'} . $filename[2];
untaint $self->{'filename'} if tainted $self->{'filename'};
untaint $self->{'fullname'} if tainted $self->{'fullname'};
untaint $self->{'workdir'} if tainted $self->{'workdir'};
$self->{'fh'} = File::Temp->new(
'TEMPLATE' => $self->{'filename'} . '.XXXXXX',
'DIR' => $self->{'workdir'},
'PERMS' => $self->{'permissions'},
'UNLINK' => 0,
'EXLOCK' => 1
);
unless (defined $self->{'fh'}) {
$self->{'error'} = boolean::true;
return $self;
}
$self->{'fh'}->autoflush(1);
$self->{'tmpfile'} = $self->{'fh'}->filename;
untaint $self->{'tmpfile'} if tainted $self->{'tmpfile'};
chown($self->{'owner'}, $self->{'group'}, $self->{'tmpfile'}) or $self->{'error'} = boolean::true;
return $self;
} #}}}
sub error :prototype($) ($self = undef) {
#{{{
=pod #{{{ error() method description
=over 4
=item B<error()>
Takes no arguments. Returns `false` if B<Config::Writer> object is
defined and `error` flag is not set and `true` otherwise.
=back
=cut #}}}
return (defined $self and isFalse $self->{'error'})
? boolean::false
: boolean::true;
} #}}}
sub say :prototype($$) ($self, $string) {
#{{{
=pod #{{{ say() method description
=over 4
=item B<say(STRING)>
Is equivalent to B<print()> method except that $/ is added to the end of the line.
=back
=cut #}}}
$self->print($string . $/);
} #}}}
sub sayf :prototype($$@) ($self, $format, @list) {
#{{{
=pod #{{{ sayf() method description
=over 4
=item B<sayf(STRING, ARRAY)>
Is equivalent to B<printf()> method except that $/ is added to the end of the format line.
=back
=cut #}}}
( run in 1.895 second using v1.01-cache-2.11-cpan-71847e10f99 )