Thread Array of Hashes aus externer Datei includen? (5 answers)
Opened by undersok at 2011-09-30 11:19

torsten
 2011-09-30 13:09
#152800 #152800
User since
2010-08-16
45 Artikel
BenutzerIn
[Homepage] [default_avatar]
Wenn Du es wirklich so machen willst, dann musst Du einfach in Deinem Hauptprogramm die Variable @workflow nochmal deklarieren (our @workflow) oder den vollen Namen, also wahrscheinlich @main::workflow benutzen.

Die Designentscheidung, den Variablennamen in der Konfigurationsdatei zu verdrahten, finde ich aber problematisch. Was hältst Du davon:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
$ echo '{a=>1},{a=>2}' |
perl -Mstrict -MData::Dumper -e 'my @l=do "/dev/fd/0"; print Dumper \@l'
$VAR1 = [
          {
            'a' => 1
          },
          {
            'a' => 2
          }
        ];


Der wichtige Punkt hier ist my @l=do $filename;

Sowas wie den C Preprozessor gibt es in Perl übrigens auch. Hier heißt das Source Filter. Damit kannst Du den Source Text Deines Programms/Moduls zwischen dem Einlesen und der Interpretation durch Perl noch flink mit Perl bearbeiten.

Beispiel:

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
  package My::P1;
  BEGIN {
    {
      package My::P1::_dbg;
      use Filter::Simple sub {
        s/^(\s*)#D /$1/mg if $ENV{"My__P1___dbg"};
      };
    }
    My::P1::_dbg->import;
  }

  use strict;

  sub new {
    my $I=bless \(my $x)=>__PACKAGE__;
    #D warn "$I is born\n";
    $I;
  }

  #D sub DESTROY {
  #D   warn "$_[0] went out of scope\n";
  #D }

  1;


Setzt Du nun beim Aufruf des Programms die Umgebungsvariable My__P1___dbg=1, verschwinden auf magische Weise die #D  Zeichen am Anfang einiger Zeilen und das Programm wird geschwätziger. Zu viel mehr als das sind Source Filter aber nicht zu gebrauchen, da die Perl-Syntax zu komplex und kontextabhängig ist.

View full thread Array of Hashes aus externer Datei includen?