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
3712 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)
http://rolfrost.de/wallpaper.html

WallPaper -- jeden Monat neu. Mit nur 2 Klicks den Aktuellen Monat auf dem Desktop.

View full thread Bad name after...