Gustl: komplexe Datenstrukturen

Beitrag lesen

Du willst keinen Hash, sondern ein Array of arrays.

hi cpan, dank dir für deine erklärung. ich weiss was ein array ist, was ein hash ist und auch was mehrdimensionale arrays sind. dem grunde nach jedenfalls.

ich frage mich nur, muss ich jetzt die komplette struktur meines scripts umbauen, nur weil es nicht möglich scheint die 1 von @array1[0] dynamisch zu ersetzen in form von z.b. @array[$i][0] oder wie auch immer man es vllt. klammern sollte/könnte/müsste. @array1[$i] wird ja auch interpretiert.

ich habe das selbe script, selbe abfolge, in JS laufen. da klappert alles (mit eval). hab mit eval auch in perl rumgespielt, aber ich brings nicht hin. vernünftige erklärungen auf deutsch find ich auch nicht dazu. im grunde könnte ich eval benutzen. was soll passieren wenn ich nur eine dynamische variable interpretieren lasse und der wert kommt aus einer sql-datenbank, die nur ich beschreibe bzw. ein anderes script das keine eingaben entgegennimmt. aber perls eval sagt bei ($1="wurm" $2="wald") "$1$2" kann nicht als "wurmwald" interpretiert werden. hingegen JS macht aus (var1 wurm var2 wald) mit eval var wurmwald. die synti in JS ist folgende:

if (eval("ein"+i) == 0) { neu = neu + eval("R"+a+"[0]"); }

ich brauche eigentlich nur eine perl-syntax für diese eine zeile JS code, und da nur für ein+i und R+a+[0]

...........

vielleicht reden wir alle aneinander vorbei?

mein script wird ein perl.modul, aber das ist wohl nebensache. ich schicke an eine sub im pm einen string der aus zahlen und doppelpunkten besteht. ich splitte die eingabe bei /:/in ein array (@eingang von mir aus) und lese die anzahl der einzelnen zahlen aus (sagen wir ich sende 5 zahlen). so oft läuft meine erste schleife.

in der ersten schleife schaut mein script, wie lange die jeweilige zahl ist sagen wir die erste zahl ist 123. wenn die länge der zahl also 3 ist, dann schaut mein script in einen array3, der 10 feste, vierstellige zeichenfolgen hat. ist die zahl 12345 muss das script in array5 kucken. ok soweit?

in der zweiten schleife, die in schleife 1 läuft, ersetze ich die einzelnen nummern der zahlen in die obigen, 4 stelligen ziffernfolgen. die zweite schleife läuft sooft wie die zahl lang ist, und schaut jedes element an also immer 10 elemente [0] .. [9] (weil jeder array 10 ziffernfolgen enthält und jede einzelne ziffer 0-9 sein kann). ich sage also auf deutsch :-)

wenn die zahl die länge 3 hat, schaue in array3. ersetze jede ziffer der zahl durch die entsprechende ziffernfolge. also 120 heisst dann

1 = inhalt element1 aus array3
2 = inhalt element2 aus array3
0 = inhalt element0 aus array3

ist die zahl z.b. 4-stellig (2875 ?) dann

2 = inhalt element2 aus array4
... usw.

das mache ich von 0-9 in schleife 2, und über die schleife 1 mit jeder zahl aus dem split vom eingansarray.

am schluss setze ich die ziffernfolgen, die durch zeichenfolgen ersetzt wurden wieder in die ursprüngliche position zwischen doppelpunkte und reurn damit.

#############

sagen wir ich übergebe 3 ganzzahlen: 12:9:29

for my $i (0..2) # 3 zahlen lang
{
  @array1 # (10 fixe elemente)
  @array2 # (10 fixe elemente) ... usw

die 3 zahlen stehen in $eingang[$i] [0] ... [2] ok?

erste zahl ist 2-stellig (1 und 2)

for my $r (0..1) # 2 ziffern lang
  {

wenn substr($eingang[$i],$r,1) == 0 und zahl zweistellig dann
    ersetze 0 in element 0 aus @array2 und hängs einfach
    an eine neue variable an $neu = $neu.element 0 aus @array2

...

wenn substr($eingang[$i],$r,1) == 9 und zahl zweistellig dann
    ersetze 9 in element 9 aus @array2 und hängs einfach
    an eine neue variable an $neu = $neu.element 9 aus @array2

und das ganze mache ich 10 mal (alle zahlen 0-9
    = gleichbedeutend mit @array2[elementposition])
  }

dann schreib ich hier die einzelnen ergebnisse aus $neu
   wieder zwischen die doppelpunkte und gibs mit return
   an mein anderes script zurück.
}

mein problem ist es jetzt N U R zu sagen dass bei einer zahl die z.b. 4-stellig ist, er auch bitte in @array4 element x auslesen und an $neu anhängen soll.

und das wäre: @ array (länge der zahl) [element 4 für die zahl 4 ...]

$array4[elementnummer]

=========== $array$r[4] =============

tja. und das ist das ganze problem das jetzt als dynamische variable zu interpretieren. wie in JS auch.

muss ich jetzt WIRKLICH wenn ich von münchen nach dachau will (was gleich daneben ist) eine reise von münchen über italien und australien nach dachau machen?

  • Gustl