[Vienna-pm] create reference from string?

peter pilsl pilsl at goldfisch.at
Mon Jan 12 12:33:39 PST 2009



SOLVED.

Es ist ein bug im Modul Net::IMAP::Client

Zeile 441 in Client.pm muss heissen

            $tokens->[3][3], $tokens->[3][1];

und nicht:

            $tokens->[3][1], $tokens->[3][3];




lg
peter


peter pilsl wrote:
> 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()
>>>
>>>
>>>
> 
> 
> 
> ------------------------------------------------------------------------
> 
> _______________________________________________
> Vienna-pm mailing list
> Vienna-pm at pm.org
> http://mail.pm.org/mailman/listinfo/vienna-pm


-- 
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


More information about the Vienna-pm mailing list