perl: mehrdimensionales array

E

=executor=

Hi,
hab ein Anfaengerproblem, und zwar:
ich uebergebe meinem Script mehrere werte zb.
> perl meinscript.pl foo,bar,whatever
Die Werte kommen in das Array @provider, was bis dahin auch funktioniert
Jetzt will ich ein mehrdimensionales Array basteln in dem alle Werte aus @provider im Format @prov_eingabe vorhanden sind.
Also das Array @choosen_provider soll am Ende so aussehen:
Code:
@choosen_provider = ([@prov_foo], [@prov_bar], [@prov_whatever]);
Soweit bin ich:
Code:
if (defined $ARGV[0]) {
      my @provider = split(/,/, $ARGV[0]);
      foreach (@provider) {
         push(@choosen_provider, \@prov_$_);
         $go = 1;
      }
 }
Perl bring die Fehlermeldung:
Scalar found where operator expected at iparray.pl line 36, near "@prov_$_" (#1)
Er will also irgendeinen Operator um @prov_ und $_ zu verbinden?
Ich hoffe ich hab das einigermassen verstaendlich erklaert ^^
 
Hallo,

dynamische Variablennamen sollte man eigentlich nicht verwenden. Was genau willst du damit bezwecken?
Ausserdem macht das so keinen Sinn, was du da schreibst. Wie du richtig erkannt hast, sind mehrdimensionale Arrays in Perl anonyme Referenzen, zumindest ab Dimension 2. Daher bringen dir die Namen nichts, du kannst sie nur mit Array[x][y] etc ansprechen.
Was du sicher willst, sind Hashes.

Code:
#!/usr/bin/perl -wl

use strict;

my %provider;

if (defined $ARGV[0]) {
  $provider{$_}++ for (split(/,/, $ARGV[0]));
}

(Ansonsten funktionieren dynamische Variablennamen so: )
Code:
${"prov_" . $_}
 
Du kannst eine Referenz nicht mit einem String verbinden! Und mit dieser Methode nichtmal Strings untereinander. Dafür gibt es den Punkt .
Und wenn du schon dynmische lexikalische Variablen verwenden willst (was du nicht machen solltest), dann stelle wenigstens sicher, dass sie existieren!
Sonst geht das schnell in die Hose.

angelsfall hat dir schon gezeigt, dass dafür Hashvariablen verwendet werden sollten.

Gruß Wolfgang
 

Ähnliche Themen

Probs mit Perl script

CGI laesst sich nicht ausfuehren

Zurück
Oben