Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]11367[/thread]

1. Jippiee und 2. Hashes und Arrays aus Variablen



<< >> 9 Einträge, 1 Seite
oes
 2008-02-26 19:57
#106371 #106371
User since
2008-02-26
11 Artikel
BenutzerIn
[default_avatar]
Zu 1:
Jippieee, seit wann klappt die Registrierung? :)

Zu 2:
Ist es in Perl vorgesehen, auf Hashes und Arrays per Variable zuzugreifen?
z.B. als Hash:
Code (perl): (dl )
$($hash){$key}=$value


oder als Array:
Code (perl): (dl )
$($array)[$wert]=$irgendwas

auch so:
Code (perl): (dl )
push(@($array),$irgendwas)


Hintergrund:

Ich habe ca. 1500 Werte (Variablen), denen ich irgendwelche Informationen zuordnen möchte. Schleifen bieten sich natürlich an, aber ich möchte Informationen auch direkt per Hashzuweisungen hinzufügen/ändern können. EIn Beispiel, dass meiner Praxis in etwa ähnlich ist:

1500 Städte (meine Variablen). Städtenamen können hinzukommen, aber auch entfallen. Die Städtenamen kenne ich im Vorfeld nicht. Diesen Städten möchte ich anzahl der Bevölkerung zuordnen, aber auch (!) Namen der Bezierke.

Komme ich vielleicht mit Arrays und hashes nicht weiter und muss über eine DB nachdenken? Was bietet sich in diesem Falle an? mySQL? (o, graus)
renee
 2008-02-26 20:48
#106374 #106374
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Lass die runden Klammern weg und dann passt es so ziemlich:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
#!/usr/bin/perl

use strict;
use warnings;

my @array;
push( @array, 1 );
push( @array, 2 );

print $array[0];

my %hash = ( key1 => 'value1', key2 => 'value2' );
print $hash{'key1'};
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
betterworld
 2008-02-26 21:05
#106377 #106377
User since
2003-08-21
2613 Artikel
ModeratorIn

user image
Ich glaube er will symbolische Referenzen haben. Dafuer muesste man die runden Klammern eher durch geschweifte ersetzen, vorher aber perlref lesen...

Wahrscheinlich waerst Du besser beraten, wenn Du Hash-of-Hashes benutzt. Dabei sollte Dir ebenfalls perlref helfen koennen. (Oder perldsc, Google, etc.)
renee
 2008-02-26 21:20
#106379 #106379
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Achso, kann natürlich sein... Dann auch perlreftut lesen...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
oes
 2008-02-26 22:24
#106384 #106384
User since
2008-02-26
11 Artikel
BenutzerIn
[default_avatar]
Hallo,
vielen Dank für die schnellen Antworten. Perlreftut war in einem Punkt genau das was ich gesucht habe. Wird mir viel weiterhelfen.

Allerdings gehts noch weiter: Wie erzeuge ich denn zur Laufzeit Hashes/Arryas?
Ich hatte ein Beispiel mit Städten angegeben. Also was mache ich, wenn nun ein Stadtname kommt, für das ich erst ein Hash anlegen muss?

Stellt euch das bitte so vor, dass das Skript gestartet wird und aus externen Dateiquellen sich die Städtenamen und die zuzuordnenden Informationen holt. Ich weiss also zu Skriptbeginn gar nicht welche Hashes/Arrays ich benutzen werde und auch nicht die Anzahl der Städte.
Gast Gast
 2008-02-26 22:46
#106387 #106387
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
my %Staedtenamen=();

#....

while(my $Stadt=shift(@neue_Staedte))
{
 my $Stadtname=$$Stadt[0];
 my $PLZ=$$Stadt[1];
 my $Einwohner=$$Stadt[2];
 $Staedtenamen{$Stadtname}={PLZ=>$PLZ, Einwohnerzahl=>$Einwohner};
}

#....

my $PLZ_Berlin=$Staedtenamen{Berlin}{PLZ};
oes
 2008-02-26 23:12
#106390 #106390
User since
2008-02-26
11 Artikel
BenutzerIn
[default_avatar]
Hallo Gast,

ich brauche paar Tage um das zu verdauen und um es in mein Skript umzusetzen. Ist für mich als Einsteiger in "Refenzen" erstmal starker Tobak.
Vielen Dank.


$Stadt als Referenz auf ein Array, OK.
Beide Schreibweisen erlaubt?
Code (perl): (dl )
my $Einwohner=${$Stadt}[2] 

Code (perl): (dl )
my $Einwohner=$$Stadt[2]
betterworld
 2008-02-27 00:28
#106396 #106396
User since
2003-08-21
2613 Artikel
ModeratorIn

user image
Gewoehnlich nutzt man die dritte Schreibweise:
Code (perl): (dl )
my $Einwohner = $Stadt->[2];
Struppi
 2008-02-27 09:03
#106401 #106401
User since
2006-02-17
628 Artikel
BenutzerIn
[Homepage]
user image
Und Variabeln die mit Großbuchstaben anfangen smybolisieren, dass diese Variabel eine Statische Paketvariabel ist.
Es empfiehlt sich diese Konventionen möglichst einzuhalten: http://perldoc.perl.org/perlstyle.html
<< >> 9 Einträge, 1 Seite



View all threads created 2008-02-26 19:57.