Thread Bitte um Hilfe bei bless Fehler (39 answers)
Opened by bianca at 2019-09-28 17:06

rosti
 2019-09-29 18:54
#190581 #190581
User since
2011-03-19
3194 Artikel
BenutzerIn
[Homepage]
user image
Nun, bless, $ref, 'Classname'; macht ja genau das: Es segnet eine Referenz mit dem Namen einer Klasse. Das kannst Du mit ref $ref; wieder auslesen.

Wobei die Referenz auf ein Array sein kann, auf einen Hash, auf einen Scalar oder auch ein Filehandle kann geblessed werden. Gewöhnlich kapselt man den Aufruf von bless im Konstruktor und nennt diese Klassenmethode new().

Natürlich hast Du recht, AUTOLOAD (AL) braucht man nicht unbedingt, aber es gehört auch zu OOP in Perl5. Ich nutze OOP um CODE wartungsfreundlicher zu strukturieren und da gehört AUTOLOAD ganz einfach dazu. So ist die Factory für mein Framework über AUTOLOAD gebaut. Das heißt, daß eigentliche Framework-Script fasse ich sei Jahren nicht mehr an, wenn ich eine neue Funktion brauche wird die entweder in der Subklasse platziert oder eben in der Factory. Das vermeidet Coderedundanzen, Code wird reusable. Und per AL wird Code nur dann geladen wenn er benötigt wird.

Eine Methode meiner Factory als Beispiel, Datei factory/insert.pm:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
use strict;
use warnings;

sub insert{
    my $self = shift;
    my $dbh  = shift;
    my $tabn = shift; 
    my %hunt = @_;
    my @fields = keys %hunt;
    $dbh->do(qq(
        INSERT INTO @{[$dbh->quote_identifier($tabn)]} (@{[join ',', map{$dbh->quote_identifier($_)}@fields]}) 
        VALUES( @{[join ',', map{$dbh->quote($_)}@hunt{@fields}]} )
    ));
}

1;


OOP ist eine praktische Angelegenheit. Diese Methode kann von jeder Klasseninstanz aufgerufen werden, da genügt eine Atrappe, ein sog. Mock. Lediglich das DBH muss vorher erstellt werden.

Ohne AUTOLOAD:
Code (perl): (dl )
1
2
3
4
5
use insert; # Factorymethode einbinden
# Objektattrappe erstellen
my $mock = bless{};
# Factorymethode aufrufen
$mock->insert($dbh, 'kette', zeichen => pack "U", 0x20AC);



Ansonsten: https://rolfrost.de/refs.html
Perlobjekte können sehr umfangreich sein. Am Ende wird alles ganz einfach. Genau das ist das Ziel von OOP.

Dazu nochn Beispiel: https://fastapi.metacpan.org/source/PILGRIM/Device...
Hier sorgt AL dafür daß eine Anonyme Funktion einen Namen bekommt.


MFG
Last edited: 2019-09-29 19:12:14 +0200 (CEST)

View full thread Bitte um Hilfe bei bless Fehler