User Tools

Site Tools


Differences

This shows you the differences between two versions of the page.

Link to this comparison view

perl:confread [2020-02-15 00:57] (current)
Line 1: Line 1:
 +=====Simple configuration file parser=====
 +
 +<code perl config.pl> ​
 +#​!/​usr/​bin/​env perl
 +
 +package Config;
 +
 +use strict;
 +use warnings;
 +
 +sub new {
 +    my ($class, $file) = @_;
 +    my $self = {
 +        file => $file
 +    };
 +    bless $self, $class;
 +    $self;
 +}
 +
 +sub file {
 +    my ($self, $name) = @_;
 +    return $self->​{'​file'​} unless $name;
 +    $self->​{'​file'​} = $name;
 +    $self;
 +}
 +
 +
 +sub read {
 +    my $self = shift;
 +    return undef unless -r $self->​file;​
 +    open my $fh, '<',​ $self->​file;​
 +    my %res;
 +    while (my $line = readline $fh) {
 +        chomp $line;
 +        $line =~ s/^\s+//g;
 +
 +        next if $line =~ /^#/;
 +        next if $line =~ /^;/;
 +        next unless $line =~ /=/;
 +
 +        my ($key, $rawvalue) = split(/​==|=>​|[=:​]/,​ $line);
 +        next unless $rawvalue and $key;
 +
 +        my ($value, $comment) = split(/​[#;​]/,​ $rawvalue);
 +
 +        $key =~ s/​^\s+|\s+$//​g;​
 +        $value =~ s/​^\s+|\s+$//​g;​
 +
 +        $res{$key} = $value;
 +    }
 +    \%res;
 +}
 +
 +1;
 +
 +use strict;
 +use warnings;
 +use Mojo::Util qw(dumper);
 +
 +my $c = Config->​new('​config.ini'​);​
 +print dumper $c->​read;​
 +
 +#my $c = Config->​new('​config.ini'​);​
 +#print dumper Config->​newread;​
 +
 +#EOF
 +</​code>​
 +
 +===Sample config===
 +
 +<​code>​
 +#
 +# $Id$
 +#
 +a = 12
 +b = qwe
 +c = abc
 +a = 1234
 +zzz =
 +xxx
 +t1 = 123 # comment
 +   ; comment
 +t2 == 456 ; comment
 +   # comment
 +t3 => 789 ; comment
 +;​comment ​
 +#EOF
 +</​code>​
 +
 +
 +===Result===
 +<​code>​
 +# ./config.pl
 +{
 +  "​a"​ => 1234,
 +  "​b"​ => "​qwe",​
 +  "​c"​ => "​abc",​
 +  "​t1"​ => 123,
 +  "​t2"​ => 456,
 +  "​t3"​ => 789
 +}
 +</​code>​
 +
 +----
 +[<>]
 +