Perl: String in Referenz konvertieren? [Duplikat]

8

Ich habe "SCALAR (0x8ec3a94)" als eine literale Zeichenfolge. Kann ich Perl dazu zwingen? mach daraus eine Referenz und folge ihr?

IE, sagen Sie Perl: "Schauen Sie in Speicherplatz 0x8ec3a94, und behandeln was ist da als Skalar "?

Verwandt mit: Perl: Die Entpackungsliste von innen nach außen funktioniert nicht ?

Und ja, mir ist klar, dass das eine schreckliche Sache ist.

    
barrycarter 22.04.2011, 21:49
quelle

2 Antworten

3

Am nächsten kommt man mit Tie :: RefHash . Die Version des armen Mannes stopft Referenzen in einem Hash

%Vor%

und zieht es später wieder heraus

%Vor%

Dieser Ansatz hat viele Nachteile. Warum willst du es so machen?

    
Greg Bacon 22.04.2011, 22:04
quelle
3

Versuchen Sie es anhand des von Andy angegebenen Links mit der Inline::C Ansatz . Sie möchten SV* anstatt AV* verwenden, aber es sollte funktionieren.

Ich habe ein Beispiel mokiert und die in diesem Link gezeigte Methode erweitert. Mit meiner begrenzten Kenntnis von C glaube ich, dass ich einen Segfault verhindert habe, wenn die Referenz nicht mehr auf etwas zeigt (Test, indem ich die inneren Klammern abnehme, so dass $ Text außerhalb des Gültigkeitsbereichs fällt). Weil ich newRV_inc im C-Abschnitt verwende, wird der Referenzzähler für $text inkrementiert. Wenn also $text nicht in den Gültigkeitsbereich fällt, aber seine gefundene Referenz ( $recovered_ref ) immer noch existiert, ist der Wert wie erwartet verfügbar (Test, indem Sie die äußeren geschweiften Klammern entfernen).

Diese Methode scheint für jede Art von Referenz zu funktionieren. Ich bin mir nicht sicher über Objekte, versuche es, wenn du willst. Für weitere Informationen hilft perldoc Inline::C , aber Sie müssen perldoc perlguts und möglicherweise sogar perldoc perlapi gehe diesen Weg weiter.

%Vor%     
Joel Berger 23.04.2011 00:16
quelle

Tags und Links