Problem mit Array

Peter J. Holzer hjp at wsr.ac.at
Wed Dec 29 11:16:18 CST 1999


On 1999-12-29 12:28:02 +0100, Peter Seitz jun. wrote:
> On Tue, 28 Dec 1999 11:56:43 +0100
>    "Peter J. Holzer" <hjp at wsr.ac.at> wrote:
> > Der Code schaut richtig aus und bei mir funktioniert er auch. Wenn
> > ich
[...]
> > einfüge ist das Ergebnis 
> > 
> > | a1 a2 a3 b1 b2 b3 c1 c2 c3
> > 
> > und das sollte es ja sein.
> > 
> > Offenbar hast Du den Bug schon beseitigt.
[...]
> Ich habe den Fehler leider nicht beseitigt. Ein my @string1 habe ich 
> nicht verwendet (sollte ich wohl besser tun).

Da war ich wohl nicht klar genug: Du hast offensichtlich beim Kürzen des
Programms für die Mailinglist den Fehler beseitigt, denn im von Dir
geposteteten Programmfragment tritt der Fehler nicht auf. Daß in Deinem
Originalprogramm der Fehler noch nicht beseitigt ist, glaube ich Dir
gerne. Nur ist es halt relativ schwer, einen Fehler in einem Code zu
finden, wenn man einen anderen Code vor Augen hat.

Daher bitte beim Posten von angeblich fehlerhaften Programmfragmenten
sich zuerst überzeugen, daß der Fehler dort auch tatsächlich auftritt.

Also am besten ein vollständiges - aber möglichst kurzes - Perlprogramm
posten, das den Fehler demonstriert, wo man sagen kann, das sollte "a b
c" ausgeben, gibt aber nur "a c" aus (als Beispiel).


> Wie stelle ich fest, dass %strings_db_caption sichtbar ist? Ich 
> schreibe vorher die Werte aus diesem Hash in eine eigene Datei und da 
> waren alle dabei.

Dann sollte es auch sichtbar sein, vorausgesetzt "vorher" bedeutet auch
"im gleichen Scope" und nicht z.B. in einer anderen Subroutine, die dann
die Subroutine, in der %strings_db_caption verwendet wird, aufruft.

> > Die ganze schleife läßt sich also zu
> > 
> > | @string1 = (@string1, (keys %strings_db));
> > 
> > bzw. 
> > 
> > | push (@string1, (keys %strings_db));
> > 
> > verkürzen.
> 
> welches von den beiden letzten Ausdruecken ist dann der effizientere?

push - und zwar um Längen (hat mich selber überrascht). Hier sind die
die User-CPU-Zeiten für 1000 inserts von einem Hash mit 3 Einträgen:

while (($text, $help) = each %strings_db_caption) { ...	18.46 s
for $text (keys %strings_db_caption) { ...		18.52 s
@string1 = (@string1, (keys %strings_db_caption));	 6.39 s
push (@string1, (keys %strings_db_caption));		 0.07 s

Die Zeiten sind jeweils Median von 3 Versuchen, auf einem PII/233 mit
perl 5.005_03 built for i386-linux.

	hp

-- 
   _  | Peter J. Holzer             | Nobody should ever have to be
|_|_) | Sysadmin WSR / Obmann LUGA  | ashamed if they have a secret love
| |   | hjp at wsr.ac.at               | for writing computer programs that
__/   | http://wsrx.wsr.ac.at/~hjp/ | actually work.  -- Donald E. Knuth
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 371 bytes
Desc: not available
Url : http://mail.pm.org/archives/vienna-pm/attachments/19991229/369de526/attachment.bin


More information about the Vienna-pm mailing list