Hallo.
Hypothetische Situatuion:
Dein Array sieht so aus: ("a","b","c;d;e","f","g")
(Das Trennzeichen innerhalb des Werts, "der eigentlich mehrere hat", wäre also das Semikolon.)
Und du willst an Stelle von "c;d;e" "c","d","e" haben, so dass dein Array nachher so aussieht: ("a","b","c","d","e","f","g")
Nehmen wir an, das ist das, was du willst, dann müsste sich das Ganze so lösen lassen:
my @a1 = ("a","b","c;d;e","f","g");
for(my $i = 0; $i < @a1; $i++)
{
next unless($a1[$i] =~ /;/);
my @a2 = split(/;/,$a1[$i]);
splice(@a1,$i,1,@a2);
$i+=@a2;
}
print join(",",@a1);
Das ursprüngliche Array (@a1) wird durchgegangen und es wird nach dem Trennzeichen (;) Ausschau gehalten.
Enthält ein Eintrag das Trennzeichen, wird er aufgesplittet und die daraus hervorgehende Liste wird an die Stelle des ursprünglichen Eintrags gesetzt.
Zu guter Letzt, wird noch der Index um die Anzahl der sich im Eintrag befindlichen Einträge erhöht, die müssen ja nicht mehr überprüft werden (kann man aber auch weg lassen).
Na ja, und wenn man's lieber kompakt (und ohne zusätzliche Indexerhöhung) haben will:
my @a1 = ("a","b","c;d;e","f","g");
for(my $i = 0; $i < @a1; $i++){splice(@a1,$i,1,split(/;/,$a1[$i])) if($a1[$i] =~ /;/);}
print join(",",@a1);
Gruß
Norbert