hotti: Problem mit Tie::Scalar

Beitrag lesen

kann den Fehler einfach nicht finden. Untenstehendes kleines Modul bindet ein Scalar an eine Klasse. Beim Aufruf in der main wird die Variable hochgezählt, aber nach der 26 gehts bei 2 wieder von vorn los. Eigenartigerweise klappt die Erhöhung, wenn eine Schleife drumgelegt wird.

Idee's ???

Kann ich nicht nachvollziehen. Ich bin jetzt bei 44..

Danke ;)

Es ist total verwirrend um nicht zu sagen zum Verzweifeln. Ich habe jetzt im Modul mal die pack/unpack-Schablone auf "V" gesetzt und es funktioniert. Tatsächlich habe ich hier eine little-Endian-Architektur (Intel), lt. perldoc -f pack:

print join(" ", map { sprintf "%#02x", $_ } unpack("C*",pack("L",0x12345678))), "\n";
0x12 0x34 0x56 0x78     # big-endian
0x78 0x56 0x34 0x12     # little-endian

Großes Arber: Die pack/unpack-Schablonen sind plattformunabhängig, auch wenn die 4 Bytes in Dateien geschrieben werden, bisher konnte ich die stets exact wiederherstellen, egal ob mit "N" oder "V" (und auch mit aus Tie::Hash abgeleiteten Klassen). Ich vermute einen Bug in Tie::Scalar oder Tie::StdScalar und Du hast sicher eine neuere Perl-Version/neuere Tie-Module und das Problem ist aus der Welt (ich gucke dann mal auf CPAN die Bug-Reports durch).

Allerdings ist der Ansatz nicht wirklich tauglich, du kannst immer nur einen Skalar binden, da du nur einen Filehandle hast, der zweite wird eine Warnung erzeugen.

Schlimmer: Es wird sogar einen dead-Lock ergeben, wenn dieselbe Datei in _einem_ Prozess verwendet wird. Der Ansatz ist überarbeitungsbedürftig, ja, hast Recht. Vielleicht sollte ich auch anstelle einer gebundenen Variablen einfach nur das Objekt zurückgeben, wobei das Problem mit dem möglichen deadLock noch anderweitig beseitigt werden muss. Ich mach dann erstmal Kaffee ;)

Horst Wirrsign

--
Wenn der Kommentar nicht zum Code passt, kann auch der Code falsch sein.