Thread Syntax für sub Aufruf im Package? (11 answers)
Opened by bianca at 2013-02-07 17:32

rosti
 2013-02-07 19:35
#165599 #165599
User since
2011-03-19
3492 Artikel
BenutzerIn
[Homepage]
user image
2013-02-07T17:21:48 bianca
2013-02-07T16:58:51 rosti
Liest sich so, als wäre das ein Fall für AutoLoader...

Was genau meinst du damit?


In PHP dient der Autoload-Mechanismus dazu, Klassen zu laden; mit einer weiteren PHP-Magic-Method kann auf Objekt-Attribute zugegriffen werden, die es bis dahin noch nicht gibt. In Summa geht per PHP dann sowas:

echo $this->AnyClass->method();

Idee, sowas in Perl zu bauen, dass könnte z.B. so aussehen:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
use strict;
use warnings;

my $mo = bless{}, 'main'; 
# einfach eine Instanz Deiner Klasse (hier: 'main');

$mo->autoload('HTTP::Headers', 'header', 'Content-Type' => 'text/plain; Charset=UTF-8');
print $mo->autoload('HTTP::Headers', 'as_string');


sub autoload{
        my $self       = shift;
        my $classname  = shift;
        my $methodname = shift; # weitere Parameter in @_
        eval("use $classname"); # Klasse zur Laufzeit einbinden
        die "Can't use Class '$classname', Error: $@ \n" if $@;
        $self->{$classname} = $classname->new() if not exists $self->{$classname};
        my $code = $self->{$classname}->can($methodname);
        $self->{$classname}->$code(@_);
}


Achtung: Die Fehlerbehandlung ist stark sanierungsbedürftig ;)
Ansonsten wird alles richtig ausgegeben:
Code: (dl )
Content-Type: text/plain; Charset=UTF-8


--Rosti

View full thread Syntax für sub Aufruf im Package?