[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