# # (c) Jan Gehring <jan.gehring@gmail.com> # # vim: set ts=2 sw=2 tw=0: # vim: set expandtab: package Rex::File::Parser::Ini; use strict; use warnings; our $VERSION = '1.7.0'; # VERSION use Data::Dumper; sub new { my $that = shift; my $proto = ref($that) || $that; my $self = {@_}; bless( $self, $proto ); return $self; } sub get { my ( $self, $section, $key ) = @_; unless ( exists $self->{"__data"}->{$section} ) { die("$section not found"); } unless ( exists $self->{"__data"}->{$section}->{$key} ) { die("$key not found in $section"); } return $self->{"__data"}->{$section}->{$key}; } sub get_sections { my ($self) = @_; return keys %{ $self->{"__data"} }; } sub read { my ($self) = @_; $self->{"__data"} = $self->_read_file; } sub _read_file { my ($self) = @_; my $data = {}; my $section; open( my $fh, "<", $self->{"file"} ); while ( my $line = <$fh> ) { chomp $line; next if ( $line =~ m/^\s*?;/ ); next if ( $line =~ m/^\s*?$/ ); if ( $line =~ m/^\[(.+)\]$/ ) { $section = $1; $data->{$section} = {}; next; } if ($section) { my ( $key, $val ) = split( /=/, $line, 2 ); $val =~ s/^\s+|\s+$//g; $key =~ s/^\s+|\s+$//g; $data->{$section}->{$key} = $val; } } close($fh); return $data; } 1;