Thread Aus dem String einer Referenz wieder eine Referenz machen (5 answers)
Opened by xubaso at 2009-06-27 12:57

murphy
 2009-06-27 15:47
#122679 #122679
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
2009-06-27T10:57:45 xubaso
[...]
ich habe einen String mit z.B.
Code: (dl )
$str="Die Adresse des Arrays ist ARRAY(0xa1e7380)"

ich möchte jetzt aus dem String mit der Arrayadresse wieder eine Referenz auf den Array bekommen.
[...]
Geht das überhaupt?

Ja, das geht, aber nur mit Hilfe der C API für Perl und Du willst das auch gar nicht tun ;-) Schliesslich programmiert man nicht zuletzt aus dem Grund in Perl, solche gefährliche Zeigermagie zu vermeiden.

Die Hauptproblem sind, dass Du zum einen sicherstellen müsstest, dass die Adresse, die Du in eine Referenz verwandeln willst, wirklich zu einem Perlobjekt gehört und zum anderen, dass das Objekt auf das Du eine Referenz rekonstruierst nicht schon längst dealloziert wurde. Wenn Du das nicht tust, dann hast Du eine sichere Methode um völlig undefiniertes Verhalten auszulösen -- am wahrscheinlichsten ist natürlich, dass Perl mit einem Speicherzugriffsfehler abstürzt, aber wenn Dein Rechner explodiert, darfst Du Dich auch nicht wundern ;-)

Insbesondere für den Fall von Objektreferenzen als Hashschlüssel wäre das Wiederherstellen der Referenzen aus den beschreibenden Strings also ziemlich sinnlos, denn wenn man nicht irgendwo anders als im Hashschlüssel noch eine echte Referenz auf das fragliche Objekt ablegt, dann wird es auf jeden Fall freigegeben, bevor man die Referenz rekonstruieren kann. Um sicherzustellen, dass eine weitere Referenz vorhanden ist, wäre es am einfachsten, im Wert zum fraglichen Schlüssel zusammen mit den eigentlichen Nutzdaten noch einmal eine Objektreferenz abzulegen. Dann ist es aber überflüssig den Schlüssel in eine Referenz zu verwandeln.
When C++ is your hammer, every problem looks like your thumb.

View full thread Aus dem String einer Referenz wieder eine Referenz machen