Thread Bad name after... (52 answers)
Opened by bianca at 2015-02-19 12:08

bianca
 2015-02-19 18:06
#179743 #179743
User since
2009-09-13
7016 Artikel
BenutzerIn

user image
Nochmal: nur der Code in der Schleife darf geändert werden.
OK, ich erweitere den Testaufbau noch weiter, damit das Problem klar wird:

Hauptscript:
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
#!/usr/bin/perl
use strict;
use warnings;


my @dispatchtab = (
    {
        moduldatei      => 'test_extern.pl',
        aufruf_sub      => \&testsub,
    },
    {
        moduldatei      => 'test_extern2.pl',
        aufruf_sub      => \&testsub,
    },
    # hier sind natürlich noch ganz viele
);
foreach my $ref (@dispatchtab) {
    # nur der Code innerhalb dieser Schleife darf geändert werden, sonst nichts!
    {
        require $ref->{moduldatei};
        package modulscope;
        $ref->{aufruf_sub}->('a');
    }
}


test_extern.pl und test_extern2.pl:
Code (perl): (dl )
1
2
3
4
5
6
7
8
#!/usr/bin/perl
use strict;
use warnings;

sub testsub {
    print "Gewonnen! Sub $_[0]\n";
}
return '1';


Wie es hier gezeigt ist wirft es
Quote
Gewonnen! Sub a
Subroutine testsub redefined at test_extern2.pl line 6.
Gewonnen! Sub a


Wenn ich require und package tausche wirft es
Quote
Undefined subroutine &main::testsub called at test.pl line 21.


Wenn ich
Code (perl): (dl )
1
2
3
4
5
6
7
8
foreach my $ref (@dispatchtab) {
    # nur der Code innerhalb dieser Schleife darf geändert werden, sonst nichts!
    {
        package modulscope;
        require $ref->{moduldatei};
    }
    modulscope::$ref->{aufruf_sub}->('a');
}
schreibe, wirft es
Quote
Bad name after modulscope:: at test.pl line 22.


Ich möchte haben:
Quote
Gewonnen! Sub a
Gewonnen! Sub a


Wie erreiche ich das unter der Prämisse, dass nur der Code in der Schleife geändert werden darf?
10 print "Hallo"
20 goto 10

View full thread Bad name after...