Thread ksh-Befehl in perl? (5 answers)
Opened by schuetze09 at 2008-10-13 11:11

topeg
 2008-10-13 14:17
#115452 #115452
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
Eine Variante, die sich ein wenig mehr wie eine Ksh verhält.
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#!/usr/bin/perl

use strict;
use warnings;
use Data::Dumper;


my @ini=<DATA>;
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."

View full thread ksh-Befehl in perl?