Thread do $file : subs in $file überschreiben meine subs! (7 answers)
Opened by sman at 2010-01-10 18:19

pq
 2010-01-10 18:33
#130322 #130322
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
Guest sman
Code (perl): (dl )
sub Machwas { eval { do "anderes.pl"; }; return 1; }

dazu kann ich nur generell sagen, dass man sowas heutzutage nicht macht und nicht machen muss.
IMHO viel sauberer wäre es, wenn du hier stattdessen ein modul mit eigenem package laden würdest und daraus eine subroutine aufrufen würdest. etwa:
Code (perl): (dl )
1
2
require Anderes;
Anderes::machwas();


Quote
Dieses andere Script ist völlig simpel, keine objekte oder module, sondern hat lediglich normale subs, z.B. auch eine
Code (perl): (dl )
sub HR { print "-" x ( $_[0] ? $_[0] : 79 ) ."\n"; }

genau dadurch überschreibt es aber die aktuelle sub HR, da es in dem kontext des packages ausgeführt wird.

Quote
Vielleicht kann man auch irgendwie do $file daran hindern subs zu überschreiben? Nach perldoc sollte das ja eigentlich sowieso nicht gehen...

wo genau liest du in perldoc, dass man keine subs überschreiben kann?
das kann man, es sollte nur eine warnung erzeugen. strict und warnings benutzt du, oder? wenn nicht, unbedingt Wiki:use strict lesen.
die lösung ist nicht, die sub nicht überschreiben zu lassen, sondern die sub ganz einfach sauber ihrem eigenen package zuzuordnen. dann hat man das problem von vorneherein nicht.
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

View full thread do $file : subs in $file überschreiben meine subs!