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:
$ 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:
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__;
$I;
}
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.