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

rosti
 2015-02-20 10:19
#179762 #179762
User since
2011-03-19
3492 Artikel
BenutzerIn
[Homepage]
user image
Der Name der Package ist egal, er muss nur bekannt sein und eindeutig. Untenstehender Code nimmt den Dateinamen und wirft alles raus, was nicht \w ist. Dann wird über den Namen der Package die Code-Referenz gezogen und ausgeführt.



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
use strict; 
use warnings;

my @units = qw(foo.pm bar.pm);
    # Alle Funtionen heißen sub foo

my $arg = 0;
foreach my $unit(@units){
    my $packname = $unit;
    $packname =~ s/\W//g;
    my $source = do{
        my $fh = IO::File->new;
        $fh->open($unit, "r") or die $!;
        read($fh, my $buffer, -s $fh);
        $fh->close;
        "package $packname;\n".$buffer;
    };
    eval "$source" or die $@;
    my $coderef = $packname->can('foo');

    $coderef->(++$arg);
}


Dateien foo.pm, bar.pm

Code (perl): (dl )
1
2
3
4
5
6
7
use strict; 
use warnings;

sub foo{
    print "sub foo: @_ \n";
}
1;

Last edited: 2015-02-20 10:22:31 +0100 (CET)

View full thread Bad name after...