Thread s/// in map? - Arrayzuweisung kürzer schreiben (12 answers)
Opened by Sven_123 at 2011-03-08 10:31

Sven_123
 2011-03-08 10:31
#146299 #146299
User since
2010-06-01
120 Artikel
BenutzerIn
[default_avatar]
Hallo,
ich rätsel seit einiger Zeit darüber, ob es möglich ist, folgende for-Schleife mit einem map zusammenzufassen:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
use strict;
use Data::Dumper;

my @bsp = (
 "a b 3 4 eins.txt",
 "c d 7 2 zwei.txt",
 "e f 4 4 drei.txt");

for my $i (0..$#bsp){
 my @vals = split (/\s+/,$bsp[$i]);
 $vals[4] =~ s/\.txt$//;
 $bsp[$i] = {$vals[4] => [$vals[2],$vals[3]]};
}

print Dumper(\@bsp);

Müsste ich das ".txt" nicht abschneiden, könnte ich ja dieses schreiben:
Code (perl): (dl )
@bsp = map{{(split)[4] => [(split)[2,3]]}} @bsp;

In dem Beispiel könnte ich natürlich nach dem Punkt nochmal splitten und so zum gewünschten Ergebnis kommen:
Code (perl): (dl )
@bsp = map{{(split(/\./,(split)[4]))[0]  => [(split)[2,3]]}} @bsp;

Aber ich ich wüsste gern, ob das mit einem s/// kombinierbar ist (oder wie ihr es möglichst kurz schreiben würdet).
In jedem Fall ist die Variante mit der for-Schleife aber vermutlich schneller, weil ich mir das getrennte splitten für key und values spar, oder? (Nicht dass man es hier merken würde.)

(Hoffe ich darf hier meine Fragen auch zu keinen Problemen bei denen ich nicht weiter käme, sondern nur zum Neugier stillen stellen... ;)

View full thread s/// in map? - Arrayzuweisung kürzer schreiben