#!/usr/bin/perl use strict; use warnings; use Data::Dumper; my @ini=; print Dumper(parse(@ini)); sub parse { my @ini=@_; my %ret; for my $data (@ini) { $data=~s/#.+$//; $ret{$1}=$2 if($data=~/^\s*(.+?)\s*=\s*(.+?)\s*$/); } my $reg=join('|', keys(%ret),keys(%ENV) ); while(my ($k,$v)=each(%ret)) { if($v=~/^'/)#' { $v=~s/^'|'$//gs; $v=~s/\\'/'/gs; } else { if($v=~/^"/)#" { $v=~s/^"|"$//g; } $v=~s/\\\$/#DOLLAR#/g; $v=~s/\$($reg)/$ret{$1}? $ret{$1}: $ENV{$1}? $ENV{$1}: ''/ge; $v=~s/#DOLLAR#/\$/g; $v=~s/\\//g; } $ret{$k}=$v if($v ne $ret{$k}); } return \%ret; } __DATA__ # ein Kommentar TEST=Ein test # auch eingeschoben WER=Jemmand besonderes WAS=$TEST TTT=$SHELL EEE=\$SHELL Name=Blub Email=$Name@rabarber.test BLA='ein Text dessen $EEE nicht beachtet wird' BLUB="Hier wird $TTT beachtet. das das \$Name aber nicht."