Thread Array of Hashes aus externer Datei includen?
(5 answers)
Opened by undersok at 2011-09-30 11:19
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. |