Schrift
[thread]9116[/thread]

Anzahl möglicher Dimensionen: Bei Has bzw Arrays



<< |< 1 2 >| >> 12 Einträge, 2 Seiten
Gast Gast
 2007-06-25 00:03
#77772 #77772
Wieviele Dimensionen kann man mit Arrays bzw Hashes erstellen?
topeg
 2007-06-25 00:31
#77773 #77773
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
beliebig viele.
sid burn
 2007-06-25 12:37
#77774 #77774
User since
2006-03-29
1520 Artikel
BenutzerIn

user image
Soviele wie dein Speicher auf deinem System ausreicht...
Nicht mehr aktiv. Bei Kontakt: ICQ: 404181669 E-Mail: perl@david-raab.de
GwenDragon
 2007-06-25 12:49
#77775 #77775
User since
2005-01-17
14748 Artikel
Admin1
[Homepage]
user image
[quote=topeg,24.06.2007, 22:31]beliebig viele.[/quote]
Falsch. So viele wie der Speicher hergibt.

Aber eine theoretische Beschränkung gibt es nicht in Perl.
bloonix
 2007-06-25 21:09
#77776 #77776
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
Code: (dl )
1
2
3
4
5
6
7
8
my %hash = (foo => {});
my $ref  = \%hash;

for (0..100000) {
  print $_, " ";
  $ref = $ref->{foo};
  $ref->{foo} = {};
}


... 99467 99468 99469 99470 99471 99472 Speicherzugriffsfehler

Bei knapp 100000 ist bei mir Schluss und das nicht, weil ich zuwenig
Speicher habe.\n\n

<!--EDIT|opi|1182791396-->
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
Linuxer
 2007-06-25 21:26
#77777 #77777
User since
2006-01-27
3890 Artikel
HausmeisterIn

user image
[quote=opi,25.06.2007, 19:09]
Code: (dl )
1
2
3
4
5
6
7
8
my %hash = (foo => {});
my $ref = \%hash;

for (0..100000) {
print $_, " ";
$ref = $ref->{foo};
$ref->{foo} = {};
}


... 99467 99468 99469 99470 99471 99472 Speicherzugriffsfehler

Bei knapp 100000 ist bei mir Schluss und das nicht, weil ich zuwenig
Speicher habe.[/quote]
hm, bei schafft er's bis 99984 ;o)
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!
Ronnie
 2007-06-25 22:04
#77778 #77778
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
Code: (dl )
89232 Segmentation fault
- nicht mal 90000; ist aber für übliche Anwendungen völlig jenseits dessen was an Tiefe zu erwarten ist.
bloonix
 2007-06-25 23:19
#77779 #77779
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
so und jetzt hängt nochmal ne null dran und seht was passiert :)

edit: und fügt noch am Ende des Skripts ein print "hello world" an, dann kann man
sehen, dass der Speicherzugriffsfehler erst beim Beenden des Skripts auftritt, aber
frag den Teufel warum.\n\n

<!--EDIT|opi|1182799507-->
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
bloonix
 2007-06-25 23:29
#77780 #77780
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
also die konkrete frage ist....

man kann 100.000 oder auch 1.000.000 angeben, die schleife läuft durch, es wird
sogar noch code danach verarbeitet, aber sobald das skript beendet wird, erscheint
der zugriffsfehler.
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
topeg
 2007-06-26 00:12
#77781 #77781
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
Lösung:
Man muß den Baum von Hand auflösen:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#!/usr/bin/perl

use strict;
use warnings;

my %hash = (foo => {});
my $ref  = \%hash;

for (0..100000) {
  print $_, "\n";
  $ref = $ref->{foo};
  $ref->{foo} = {};
}

#%hash = {}; # <= Speicherzugriffsfehler

my $delete;
$delete=sub {
  my $href=shift(@_);
  $delete->($href->{foo}) if(ref($href->{foo}) eq 'HASH');
  %$href=();
};
$delete->(\%hash);

print "ende\n";
<< |< 1 2 >| >> 12 Einträge, 2 Seiten



View all threads created 2007-06-25 00:03.