Thread eval is evil: Willkommen auf der dunklen Seite?! (19 answers)
Opened by Ronnie at 2006-11-22 21:21

sid burn
 2006-11-24 01:25
#71931 #71931
User since
2006-03-29
1520 Artikel
BenutzerIn

user image
[quote=Ronnie,23.Nov..2006, 23:00][quote=pq,23.11.2006, 09:25]ronnie, dein beispiel als subref:[/quote]
@pq: Das geht weil es ein Closure ist und so seine Umgebung mitnimmt, oder?[/quote]
Also wenn ich mal darauf antworten darf.
Eigentlich hat das Verfahren von pq nichts mit einer Closure zu tun. Sondern bei dem Verfahren wird die Symboltabelle direkt bearbeitet. Du solltest dir mal anschauen wie das Modul "Exporter" Arbeitet, das verfährt genauso.

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/usr/bin/perl
use warnings;
use strict;

{ package foo;
my $name = 'hallo';
my $subref = sub {
print "Hallo, Welt!\n";
};
no strict 'refs';
*{'main::'.$name} = $subref;
}

package main;
hallo();


Die Technik basiert eher darauf das du einem Typeglob eine Subref zuweist. Das bedeutet nur der Code Teil des Typeglobs wird gesetzt. Der Wert für den Skalar, Array, Hash, Dateihandle, format etc. bleibt im Typeglob erhalten.

Mit "no strict 'refs'" kannst du dann den Funktionsname auch durch einen String angeben.

Durch diese Möglichkeit wird das exportieren ermöglicht.


Wenn der Sourcecode nicht Variabel zusammenebaut wird, solltest du auch eher diese Wegen gehen.
Nicht mehr aktiv. Bei Kontakt: ICQ: 404181669 E-Mail: perl@david-raab.de

View full thread eval is evil: Willkommen auf der dunklen Seite?!