[Vienna-pm] create reference from string?

peter pilsl pilsl at goldfisch.at
Mon Jan 12 12:22:52 PST 2009


Danke.

Im Anschluss mein Test-Code.  username und passwort sind echt und können
im rahmen dieses problems verwendet werden. hab einen test-imap-account
auf meinem server eingerichtet, der zwei mails drauf hat.

# /usr/local/sbin/mailscripts/i1.pl
process INBOX   2 messages
$VAR1 = {
          'ARRAY(0xb4e6e0)' => '1',
          'ARRAY(0xb4e730)' => '2'
        };


und das programm i1.pl ist attached und also voll einsatzbereit.

vielen dank,
peter

ps:

perl :  v5.8.8 built for x86_64-linux-gnu-thread-multi

und ich verwende auch 0.6 von Net::IMAP::Client und mir ist auch noch
kein Fehler ins Auge gesprungen ...


Roland Giersig wrote:
> Nein, es gibt keine Möglichkeit, eine stringifizierte Referenz wieder zu
> entstringifizieren. Schaut nach einem Bug in Net::IMAP::Client aus, der
> Autor hat vielleicht beim Zusammenbauen des Hashes key und value
> verwechselt. Edit: Ich hab mir kurz den Code von Net::IMAP::Client v0.6
> angesehen, schaut eigentlich ganz OK aus, kein offensichtlicher
> "Dreher". Poste mal deinen Test-Code...
> 
> LG, Roland
> 
> PS: weiterführende Dokumentation für Interessierte:
> 
> perldoc perlfaq4
> 
> How can I use a reference as a hash key?
> 
> (contributed by brian d foy)
> 
> Hash keys are strings, so you can’t really use a reference as the key.
> When you try to do that, perl turns the reference into its stringified
> form (for instance, "HASH(0xDEADBEEF)"). From there you can’t get back
> the reference from the stringified form, at least without doing some
> extra work on your own.
> Also remember that hash keys must be unique, but two different variables
> can store the same reference (and those variables can change later).
> 
> The Tie::RefHash module, which is distributed with perl, might be what
> you want. It handles that extra work.
> 
> 
> peter pilsl wrote:
>> Ich hab ein verzwicktes Problem.  Ein Modul (von CPAN) sollte auf eine
>> bestimmte Methode als Ergebnis eine Hashreferenz zurückliefern mit
>> id-nummern als keys, die wieder auf array-refs zeigen, also
>>
>> id1 => ARRAYREF1,
>> id2 => ARRAYREF2,
>> usw.
>>
>> stattdessen erhalte ich zB:
>>
>> {
>>   'ARRAY(0xb3f090)' => '623975'
>> };
>>
>> und der key 'ARRAY(0xb3f090)' ist ein string   (ref() auf den key ergibt
>> den leerstring, also keine reference.
>>
>> Nun gibt es zwei Möglichkeiten:
>>
>> i) entweder ich versteh da einfach was nicht
>> ii) im Modul ist ein bug und da lauft einfach was schief.
>>
>> nach viel nachdenken bin ich derzeit eher zu Variante ii) geneigt und
>> bevor ich mir jetzt den modul-code vornehm und/oder einen bug-report
>> schicke, frage ich mich, obs eine Methode gibt, den string
>> 'ARRAY(0xb3f090)' zu un-dereferenzieren (?), sodass ich Zugriff aus das
>> Array bekomme, das hier beschrieben wird.
>>
>> Dann könnt ich nämlich mal schauen, ob dort das drinnen ist was ich
>> erwarte und wüsste auch besser, wonach ich beim debuggen eigentlich
>> suchen müsste.
>>
>> Hoffe, ich hab mein problem halbwegs klar beschrieben :)
>>
>>
>> kurzversion wäre:
>>
>> $a=[1,2,3];
>> $b=$a."\n";
>> chomp $b;
>> # $b ist nun ein echter string
>> print $b," ",ref($b),"\n";
>>
>> Und dann will ich von $b wieder auf das array [1,2,3], natürlich ohne $a
>> zu verwenden ...
>>
>>
>> danke
>> lg
>> peter
>>
>>
>> ps: das modul mit dem ich dieses problem hab ist Net::IMAP::Client und
>> die Funktion get_flags()
>>
>>
>>


-- 
mag. peter pilsl - goldfisch.at
IT-Consulting
Tel: +43-699-11288470
Tel: +43-1-8900602
Fax: +43-1-8900602-15
skype: peter.pilsl
pilsl at goldfisch.at
www.goldfisch.at

-------------- next part --------------
A non-text attachment was scrubbed...
Name: i1.pl
Type: application/x-perl
Size: 972 bytes
Desc: not available
URL: <http://mail.pm.org/pipermail/vienna-pm/attachments/20090112/579ffaf2/attachment.bin>


More information about the Vienna-pm mailing list