[Dresden-pm] Problem mit Moduleinbindung

Steffen Schwigon schwigon at webit.de
Mi Aug 15 01:01:56 PDT 2007


Hi!

Steffen Winkler's Kritik klingt vielleicht etwas roh am frühen Morgen,
prinzipiell sind seine Tips aber Gold wert.

Der wesentliche Unterschied ist, dass er vorschlägt, nicht Strings zu
konstruieren, sondern direkt die dynamische Natur von Perl zu
verwenden.

Ich finde es weniger wegen der Geschwindigkeit kritisch, sondern wegen
der Unklarheiten, was bei der String-Interpolatio aus Deinen Variablen
wird.


Hier eine Problemzone, die beim Zusammenbauen von Strings eine Ursache
sein kann:

"Thomas Rittsche" <thomas.rittsche at gmail.com> writes:
>  ($value{'a'}, $value{'b'}, $value{'c'}) =
>  eval"$myModul::calculate(\%val)";
       ^                    ^^    ^

Es ist nicht sicher, ob Du versuchst, das % zu escapen, oder ob Du
eine Hashreferenz möchtest. Momentan escapest Du nur mit dem \
innerhalb der Doppelhochkommas.

Möchtest Du eine Hashreferenz reingeben, dann musst Du den \
seinerseits escapen und dann das % auch noch, damit Dir nicht die
Inhalte von %val schon in den String reinkonstruiert werden.

Alles in allem ein kompliziertes Stück Unüberschaubarkeit in so einem
kleinen String.

Du könntest die Verwendung von Einzelhochkommas in Betracht
ziehen:

 ($value{a}, $value{b}, $value{c}) = eval "$myModul::calculate".'(\%val)';

Weiterer Tip: Bau Dir den String vorher zusammen, printe ihn aus und
eval erst dann:

  use Data::Dumper;
  my $str = "$myModul::calculate".'(\%val)';
  print Dumper($str);
  eval $str;

So siehst Du, was auch Dein eval sieht.

Aber versuch besser, Steffen Winkler's Mail zu verstehen.



> Kann das so funktionieren ???? So weit ich das überblicken kann ;),
> kommen aus diesem Aufruf "magische" Sachen zurück, nur nicht das, was
> ich erwarten würde...

Am besten, Du konstruierst mal ein Mini-Modul und baust den Fall
minimalistisch nach. Dann haben wir eine gemeinsame Basis, an der man
sieht, was man erwarten würde und was es wirklich tut.

3Steffen
-- 
Steffen Schwigon <schwigon at webit.de>
Dresden Perl Mongers <http://dresden-pm.org/>
Deutscher Perl-Workshop <http://www.perl-workshop.de/>