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

arrays erzeugen, mit namen aus anderem array

Leser: 2


<< |< 1 2 >| >> 13 Einträge, 2 Seiten
landogar
 2005-10-26 10:50
#59325 #59325
User since
2005-10-26
8 Artikel
BenutzerIn
[default_avatar]
Hallo zusammen!!

weis jemand wie ich arrays erzeuge, die ihren namen aus einem anderen array bekommen??

bsp:

@arraynamen ('name erstes array','name zweites array','name drittes array' );

for (@arraynamen)
{
my @"$arraynamen[$cnt]";
$cnt++;
}

so ungefähr hab ich mir das vorgestellt...

das ergebnis sollten dann drei arrays sein mit die ihren namen aus dem array @arraynamen erhalten haben.

wäre dankbar für eine antwort! mir ist auch schon geholfen, wenn mir jemand sagt, dass es so oder so ähnlich nicht gehen kann, dann mach ich es eben auf umwegen...\n\n

<!--EDIT|landogar|1130309527-->
renee
 2005-10-26 11:08
#59326 #59326
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Benutze dafuer Hashes und Arrayreferenzen:
Code: (dl )
1
2
3
4
5
6
7
8
my @arraynamen ('name erstes array','name zweites array','name drittes array' );

my %hash;

for (@arraynamen)
{
 $hash{$_} = [qw/element1 element2 .../];
}


Unbedingt lesen:
perldoc perllol
Wiki:perldoc perlreftut\n\n

<!--EDIT|renee|1130310566-->
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/
Taulmarill
 2005-10-26 12:48
#59327 #59327
User since
2004-02-19
1750 Artikel
BenutzerIn

user image
ich muss renee recht geben. im prinzip kann man so was machen, aber das willst du nicht (auch wenn du so etwas warscheinlich nicht hören willst). Das anlegen von variablen deren name erst zur laufzeit des programms festgelegt wird, ist so selten sinnvoll, dass man diese sachen sehr gut verstehen muss, um zu wissen, wann man das wirklich braucht. in über 99% der fälle sind hashes die richtige wahl.

wiki: perldoc perldsc passt auch zu dem thema, ist aber noch auf englisch.
$_=unpack"B*",~pack"H*",$_ and y&1|0& |#&&print"$_\n"for@.=qw BFA2F7C39139F45F78
0A28104594444504400 0A2F107D54447DE7800 0A2110453444450500 73CF1045138445F4800 0
F3EF2044E3D17DE 8A08A0451412411 F3CF207DF41C79E 820A20451412414 83E93C4513D17D2B
landogar
 2005-10-26 14:52
#59328 #59328
User since
2005-10-26
8 Artikel
BenutzerIn
[default_avatar]
erstmal danke für eure antworten!!

in meinem fall ist es in soweit sinnvoll, die variablen erst zur laufzeit zu bestimmen, da sich erst zu laufzeit entscheidet mit welchen und wie vielen das skript arbeiten und sie dann zurück an ein anderes skript geben soll...

so wär es die kürzeste und einfachste lösung!
also falls jemand weis wie es geht, immer her mit dem vorschlag!

solange versuch ichs jetzt mit hashes hinzubiegen...
Gast Gast
 2005-10-26 15:05
#59329 #59329
Dafür nimmt man Hashes.
pKai
 2005-10-26 15:57
#59330 #59330
User since
2005-02-18
357 Artikel
BenutzerIn
[default_avatar]
Und für eine ausführliche Begründung siehe diesen Wiki-Artikel
I sense a soul in search of answers.
landogar
 2005-10-26 17:59
#59331 #59331
User since
2005-10-26
8 Artikel
BenutzerIn
[default_avatar]
hi!

den artikel hab ich schon gelesen! ich seh es ja auch ein, dass es in den meisten (eigentlich allen fällen) schwachsinn ist, so zu programmieren.

bei mir ist es nur der fall, dass es dann für die leute, die dann auf mein skript zugreifen, viel "einfacher" wäre die von ihnen gewünschten werte zu bekommen!

mein skript bleibt davon total unberührt!! weil ich die berechnungen und aufbereitung der daten über zwei dimensionale hashes abbilde, wie auch schon oben mehrfach vorgeschlagen!

ich würde die werte nur vor der übergabe in gleich benannte variablen packen.
die variablen namen, werden durch eine fest von mir definierte matrix überprüft, diese lässt nur 34 namen zu. (mehr werden auch nicht gebraucht und diese kommen keinenfalls mit irgendwelchen anderen vordefinierten variablen in konflikt)

ich weis auch das es schwachsinn ist!! (hier nochmal danke, dass ihr mich trotzdem mehrfach darauf hingewiesen habt!!!!)
wie schnell läuft jemand in so eine "falle", wie z.B. im artikel beschrieben!
aber wie ihr sicher aus eurem eigenen berufsleben kennt... vorgabe ist vorgabe und wenn ein so ein sturkopf, der leider mehr zu sagen hat, nicht auf alle warnungen reagiert, dann kriegt er von mir genau das was er haben will!!!
und vorerst, sogar ohne jegliche prüfung, dass er schön in einen fehler läuft!!

aber ich muss es so oder so machen!! ob jetzt dynamisch wie ich oben gefragt habe, oder fest im skript verankert... die werte werden definitiv den variablen wert als name bekommen müssen...

also, bitte sagt mir trotz besseren wissen und gewissens, wie das funktioniert...
coax
 2005-10-26 19:38
#59332 #59332
User since
2003-08-11
457 Artikel
BenutzerIn
[default_avatar]
[quote=landogar,26.10.2005, 15:59]also, bitte sagt mir trotz besseren wissen und gewissens, wie das funktioniert...[/quote]
Die Code-Beispiele im Artikel, die zeigen wie man's falsch macht, enthalten die Antwort.
,,Das perlt aber heute wieder...'' -- Dittsche
landogar
 2005-10-28 16:26
#59333 #59333
User since
2005-10-26
8 Artikel
BenutzerIn
[default_avatar]
hallo!

vielen dank für eure antworten!!
habe es jetzt doch durch gebracht, das skript rein hash basierend aufzubauen!!

also war alle aufregung umsonst...

hab da noch eine kurze frage:

ich hab jetzt ein zweidimensionales hash{1.dim}{2.dim}

ich befülle dieses jetzt mit werten:
vereinfacht:
hash{1.dim}{2.dim1}="wert";
hash{1.dim}{2.dim2}="wert";
hash{1.dim}{2.dim3}="wert";
hash{1.dim}{2.dim4}="wert";

wenn ich jetzt einen wert in der 1.dimension hinzufügen will
hash{1.dim}="wert";
kommt mit use strict folgende fehlermeldung:
Can't use string ("1") as a HASH ref while "strict refs" in use at...

warum kann ich in der ersten ebene keinen wert mehr hinzufügen??

hab ich da einen denkfehler drin??

viele grüße

landogar
Ronnie
 2005-10-28 16:36
#59334 #59334
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
Probier es mal mit Anführungszeichen zum quoten:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#!/usr/bin/perl

use strict;
use warnings;

use Data::Dumper;

my %hash;

$hash{'1.dim'}{'2.dim1'}="wert1";
$hash{'1.dim'}{'2.dim2'}="wert2";
$hash{'1.dim'}{'2.dim3'}="wert3";
$hash{'1.dim'}{'2.dim4'}="wert4";

print Dumper \%hash;

$hash{'1.dim'}="wert";

print Dumper \%hash;
<< |< 1 2 >| >> 13 Einträge, 2 Seiten



View all threads created 2005-10-26 10:50.