Schrift
[thread]5622[/thread]

Hashes (Seite 3)

Leser: 2


<< |< 1 2 3 >| >> 28 Einträge, 3 Seiten
jan
 2003-08-16 15:05
#53432 #53432
User since
2003-08-04
2536 Artikel
ModeratorIn
[Homepage] [default_avatar]
ja, aber wahrscheinlich hat er da irgendwie eine schleife drin und es kann vorkommen, dass manche nicht hochgezählt werden und daher undef bleiben ;)
Dubu
 2003-08-16 15:16
#53433 #53433
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
Diese Skalare werden ja wohl nicht selber hochgezaehlt, sondern dienen als Hash-Keys. Und die duerfen nicht undef sein.
Code (perl): (dl )
1
2
3
4
5
my %hash;
my &#36nixdrin;
&#36hash{&#36nixdrin}++;

Use of uninitialized value in hash element at - line 3.


@BrownWolf: Bitte lass die Anfuehrungszeichen um skalare Variablen weg ("$bar"), das ist schlechter Stil und verlangsamt das Programm unnoetig.

Arrrgll!! Der Boardparser laesst mich nicht __END__ schreiben! Noch schlimmer, er loescht alles zwischen doppelten Unterstrichen sogar aus dem Eingabefeld! Soll das etwa ein Feature sein?
Ishka
 2003-08-16 15:18
#53434 #53434
User since
2003-08-04
771 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Das ist blos schlechter Stil - verlangsamen tut es die Programme nicht. (Perl hat nen internen Optimierer)
sub z{if(@_){1while$x[$k=rand 10];t($t=$x[$k]=1)}print map"$z[$x[$_]]$_".($_%3?
"":"\n"),1..9}sub t{$j=0;$x[$_+1]==$t&&($j+=2**$_)for 0..8;z,die"Gewinner $z[$t]
"if grep$_==($j&$_),7,56,73,84,146,273,292,448;z,die"Gleichstand\n"if@x>9&&!grep
!$_,@x}@x=4;@z=qw{. [ (};z$^T&1;while(<>){next if$_>9||$x[$_];t$t=$x[$_]=2;z 1}
Dubu
 2003-08-16 15:30
#53435 #53435
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
Dann sag das meinem Perl:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
#!/usr/bin/perl
use strict;
use warnings;
use Benchmark qw/cmpthese/;

my %hash;
my &#36key="foo";

cmpthese (-10, {
    ohne  => sub { &#36hash{&#36key}=0; &#36hash{&#36key}++ for 0 .. 1_000_000; },
    mit   => sub { &#36hash{"&#36key"}=0; &#36hash{"&#36key"}++ for 0 .. 1_000_000; },
});

Code: (dl )
1
2
3
4
5
6
Benchmark: running mit, ohne for at least 10 CPU seconds...
      mit: 11 wallclock secs (10.36 usr +  0.01 sys = 10.37 CPU) @  0.87/s (n=9)
     ohne: 11 wallclock secs (10.12 usr +  0.02 sys = 10.14 CPU) @  2.66/s (n=27)
    s/iter  mit ohne
mit    1.15   -- -67%
ohne  0.376 207%   --
BrownWolf
 2003-08-16 15:52
#53436 #53436
User since
2003-08-15
308 Artikel
BenutzerIn
[default_avatar]
[quote=Dubu,16.08.2003, 13:16]Diese Skalare werden ja wohl nicht selber hochgezaehlt, sondern dienen als Hash-Keys. Und die duerfen nicht undef sein.
Code (perl): (dl )
1
2
3
4
5
my %hash;
my &#36nixdrin;
&#36hash{&#36nixdrin}++;

Use of uninitialized value in hash element at - line 3.


@BrownWolf: Bitte lass die Anfuehrungszeichen um skalare Variablen weg ("$bar"), das ist schlechter Stil und verlangsamt das Programm unnoetig.

Arrrgll!! Der Boardparser laesst mich nicht __END__ schreiben! Noch schlimmer, er loescht alles zwischen doppelten Unterstrichen sogar aus dem Eingabefeld! Soll das etwa ein Feature sein?[/quote]
Hallo Dubu,

dachte immer das ist besserer Stil wenn man mit Anführungszeichen macht.
Ich hatte auch an das eine Problem gedacht ....

Code (perl): (dl )
1
2
3
4
5
6
7
my %hash = (
"bla bla" => 1,
);

my &#36bla = 'bla bla';
print &#36hash{&#36bla}; <= kein Fehler .. ohne "
print &#36hash{bla bla}; <= Fehler


Ich setze die " immer schon halb automatisch.
Ansonsten zu meinem Problem:

Code (perl): (dl )
&#36var = &#36var || 0;


Sieht gut aus. Glaub das funktioniert sogar in meinem Script.
Dank euch allen *G*

BrownWolf

Edit: Oh man jetzt sagte mir mein PC eben das die Datei beschädigt ist und ich ScanDisk ausführen soll.
PC neugestartet und er hat irgendwas abgeschnitten.
Nun ist mein Script gelöscht ... wie ich Windows hasse.
Alles nochmal neu !!! :(\n\n

<!--EDIT|BrownWolf|1061036783-->
Code (perl): ()
1
2
3
sub _{s;;xrqIpiql\\{}p{pl{R>rl{N{}gjwpkssq]>rl{N;;;*{{}=*{_};;
&#36{{}={q{{{}}}=>[reverse+split+reverse+q;}{;]};&#36{{}->{q{{{}}}}->[@{{}];}
&#36{{}=reverse+_(q{{}}=>q{{}})^chr(30)x+length&_(q{{}}=>,q{{}})and+print;
Dubu
 2003-08-16 16:59
#53437 #53437
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
Wie machst du es denn bei Zuweisungen?
Code (perl): (dl )
1
2
3
4
5
my &#36bla = 'bla bla';

my &#36var = bla bla;   # Fehler!
my &#36var = &#36bla;      # Richtig
my &#36var = "&#36bla";    # Syntaktisch korrekt, aber unschoen.

Dass es zulaessig ist, ein einzelnes Bareword als Hashkey ohne Quotes zu setzen, heisst jetzt nicht, dass man andernfalls jedes Hash-Argument in Quotes setzen muesste. Was wuerdest du denn mit Funktionsaufrufen oder Termen machen?
Code (perl): (dl )
1
2
3
4
5
6
7
my %wurzel;
&#36wurzel{&#36_*&#36_} = &#36_ for 1 .. 20;

#####

my %lastonline;
&#36lastonline{param('user')} = time;
BrownWolf
 2003-08-16 21:26
#53438 #53438
User since
2003-08-15
308 Artikel
BenutzerIn
[default_avatar]
Hallo,

habe das Skript doch noch gerettet ....
Nun habe ich aber nen andres Problem *G*

Also ich lese mit einer for Schleife mehrere Dateien aus.

Code (perl): (dl )
1
2
3
4
5
6
foreach my &#36lines(@log) {
if(&#36lines =~ /\"(.+)<.+><(.+)><>\" entered the game/) {
my(&#36name,&#36wonid) = (&#361,&#362);   

}
}


Jetzt ist $name in $1 gespeichert und die WONID in $2.
Nun kann es passieren das alles hundertmal im Log steht:

Code: (dl )
1
2
3
4
"BrownWolf<..><8957333><>" entered the game
"Bla<..><8374444><>" entered the game
"Barbara<..><885333><>" entered the game
"BrownWolf<..><8957333><>" entered the game


usw ...

Wenn man jetzt den Nick ändert hat man aber noch dieselbe WONID. Also würde später im Log stehen:

Code: (dl )
"Brown<..><8957333><>" entered the game


Ich möchte also alle Nicks speichern die die WONID 8957333 haben. Ich hätte an:

Code (perl): (dl )
1
2
my %nicks;
&#36nicks{&#36wonid}[0] = &#36name;


etc. gedacht blos wie soll ich dann den nächsten Nick (der nicht wieder BrownWolf sein darf sondern Brown) auf Element 1 speichern.

Hoffe ich versteht was ich meine =/

BrownWolf

PS: Dubu du hast schon recht ... werde demnächst auch beim Programmieren die " weglassen ;)\n\n

<!--EDIT|BrownWolf|1061054817-->
Code (perl): ()
1
2
3
sub _{s;;xrqIpiql\\{}p{pl{R>rl{N{}gjwpkssq]>rl{N;;;*{{}=*{_};;
&#36{{}={q{{{}}}=>[reverse+split+reverse+q;}{;]};&#36{{}->{q{{{}}}}->[@{{}];}
&#36{{}=reverse+_(q{{}}=>q{{}})^chr(30)x+length&_(q{{}}=>,q{{}})and+print;
jan
 2003-08-16 21:38
#53439 #53439
User since
2003-08-04
2536 Artikel
ModeratorIn
[Homepage] [default_avatar]
statt
Code (perl): (dl )
&#36nicks{&#36wonid}[0] = &#36name;
einfach irgendetwas wie
Code (perl): (dl )
push @{&#36nicks{&#36wonid}}, &#36name;
<< |< 1 2 3 >| >> 28 Einträge, 3 Seiten



View all threads created 2003-08-15 22:03.