Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]7283[/thread]

Funktionen in packages



<< |< 1 2 >| >> 14 Einträge, 2 Seiten
Strazke
 2005-09-16 02:43
#58075 #58075
User since
2005-07-11
120 Artikel
BenutzerIn
[default_avatar]
Hallo, ist es "normal", dass man auch funktionen definiert, die alleine gar nicht angesprochen werden können/sollen, sondern nur dazu dienen, von anderen funktionen im Packet aufgerufen zu werden oder kann man irgenwie verhindern, dass der Benutzer des Moduls diese Funktionen aufruft?
esskar
 2005-09-16 02:50
#58076 #58076
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
es ist normal und verhindern kann man es nur schwer
renee
 2005-09-16 09:42
#58077 #58077
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
verhindern kann man es nicht direkt, aber Du kannst die Ausführung verweigern, wenn es nicht aus dem Modul kommt:
Code: (dl )
1
2
3
4
5
sub function{
my ($package) = (caller())[0];
die "Aufruf nicht erlaubt!\n" unless($package eq $ownpackage);
[...]
}


in $ownpackage steht halt der Packagenamen Deines Moduls...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
pq
 2005-09-16 12:25
#58078 #58078
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[quote=renee,16.09.2005, 07:42]verhindern kann man es nicht direkt, aber Du kannst die Ausführung verweigern, wenn es nicht aus dem Modul kommt:[/quote]
wobei man das austricksen kann, wenn man wirklich will:
package main;
# böses skript
package fremd;
fremd->funktion(); # cheat
package main;
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
renee
 2005-09-16 13:01
#58079 #58079
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Dann kann man zusätzlich noch ne Abfrage auf die Dateimachen...
Code: (dl )
1
2
3
4
5
sub function{
my ($package,$file) = (caller())[0..1];
die "Aufruf nicht erlaubt!\n" unless(($package eq $ownpackage) && ($file eq _ _FILE_ _);
[...]
}
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
betterworld
 2005-09-16 14:16
#58080 #58080
User since
2003-08-21
2613 Artikel
ModeratorIn

user image
Man kann den Funktionsnamen mit einem Unterstrich anfangen lassen. Das ist allgemein anerkannt fuer private Sachen. Wenn der Benutzer so eine Funktion ausfuehrt, ist er selbst schuld, denn an ihrem Namen erkennt er, dass das nicht so vorgesehen ist.\n\n

<!--EDIT|betterworld|1126865803-->
betterworld
 2005-09-16 14:20
#58081 #58081
User since
2003-08-21
2613 Artikel
ModeratorIn

user image
[quote=renee,16.09.2005, 11:01]Dann kann man zusätzlich noch ne Abfrage auf die Dateimachen...[/quote]
Man sollte aber nicht zu viel Muehe darauf verschwenden, seine Funktion vor fremdem Zugriff zu bewahren. Denn wirklich geheimhalten kann man in Perl gar nichts. Wenn ich so eine Funktion wirklich aufrufen wollte, kaeme ich letztendlich mit XS bestimmt trotzdem dran.
renee
 2005-09-16 14:25
#58082 #58082
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Schon klar, aber damit kann man etwas ähnliches wie Kapselung erreichen. Und für XS wird der Aufwand dann vermutlich auch schon wieder etwas zu groß, nur um an eine "interne" Subroutine zu kommen...

Die meisten OO-Module bieten ja "öffentliche" Methode für das Ergebnis der "privaten" Methoden...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Gast Gast
 2005-09-16 15:07
#58083 #58083
Leute, die Dinge falsch machen wollen, finden immer einen Weg. Daher seh ich das eigentlich als deren Problem an, ich bin nur für die hübschen Schnittstellen zuständig :)\n\n

<!--EDIT|phaylon|1126868854-->
Crian
 2005-09-20 19:57
#58084 #58084
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
Ja, bei Perl wird der Garten nicht betreten, weil "privat" dort steht, und nicht weil ein fetter Dobermann drin sitzt.
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
<< |< 1 2 >| >> 14 Einträge, 2 Seiten



View all threads created 2005-09-16 02:43.