Leser: 27
1 2 3 4 5
my @paths = ("asdf", "qwert"); my $pwd = "xpto"; for(my $idx = 0; $idx <= $#paths; ++$idx){ $paths[$idx] = $pwd . "/" . $paths[$idx]; }
1 2 3 4 5 6
$_ = "$pwd/$_" for @paths; # oder etwas gesprächiger: for my $path (@paths) { $path = "$pwd/$path"; }
@paths = map{$pwd.'/'.$_} (@paths);
foreach my $path (@paths) { $path = "$pwd/$path"; }
for(my $idx = 0; $idx <= $#paths; ++$idx){ ... }
2009-09-23T08:03:41 Hagenmap hat in diesem Fall den Nachteil, dass intern ein temporäres Array gebraucht wird. Hier ist die Lösung mit for besser.
2009-09-23T08:03:41 HagenKann mir aber irgendwer erklären warum die Lösung mit der for-/foreache-Schleife funktioniert? Ich dachte durch das "my" wäre das "$path" nur auf die Schleife begrenzt, ähnlich wie das '$idx' in der for-Schleife
Code: (dl )for(my $idx = 0; $idx <= $#paths; ++$idx){ ... }
Falls sich $path in der Schleife ändern sollte, ich aber @paths nicht ändern möchte, gäbe es dazu eine andere sinnvolle Lösung als mit einer weiteren Variablen?
2009-09-23T11:02:08 reneeSo würde ich map aber nicht verwenden, da das nicht unbedingt wartbar ist. Ich denke auch nicht immer dran, dass sich map in so einem Fall anders verhält als "normal".
Guest werBei einer Zuweisung hast du recht, aber nicht wenn man map so verwendet:
Code (perl): (dl )map{ "$pwd/$_" }@path;
Quote"map" in void context is no longer expensive. "map" is now context aware, and will not construct a list if called in void context.
1 2 3 4 5 6 7 8 9
DB<6> $pwd="xxx" DB<8> @path=qw/a b c/ DB<9> map{ "$pwd/$_" }@path; DB<10> p "@path" a b c
Guest werja, habe was vergessen...
Code (perl): (dl )map{ $_="$pwd/$_" }@path;
$_="asd/$_" for @path
2009-09-23T13:06:28 sid burn..., und noch nebenbei eine Liste zurück gibt die du eh sofort wieder verwirrst.
Quotemap in void context is no longer expensive. map is now context aware, and will not construct a list if called in void context.
2009-09-23T08:55:59 pqhat es einen grund, warum du die lösung mit for/foreach einfach wiederholst?
(for und foreach sind für perl genau dasselbe)
Quote$path ist ein Alias, der direkt auf das Element verweist. Änderst Du das Alias, änderst Du das Element.
2009-09-23T09:55:00 HagenBei mir ist "foreach" quasi aus dem Wortschatz verschwunden - ist nur mehr Schreibarbeit..."Gefühlsmäßig" war for für mich immer mit Zählvariablen, während foreach einfach ein Array durchläuft. Aber wie gesagt/geschrieben, nicht groß darüber nachgedacht bzw. wieder etwas dazu gelernt.
2009-09-23T09:55:00 Hagen@Renee
Quote$path ist ein Alias, der direkt auf das Element verweist. Änderst Du das Alias, änderst Du das Element.
Danke, das macht dann für mich Sinn. An welcher Stelle könnte man denn dann map sinnvoll nutzen?
QuoteDanke, das macht dann für mich Sinn. An welcher Stelle könnte man denn dann map sinnvoll nutzen?
1 2 3 4
my @new_array; for my $value ( @array ) { push @new_array, $value + 10; }
my @new_array = map { $_ + 10 } @array;
Quotealls sich $path in der Schleife ändern sollte, ich aber @paths nicht ändern möchte, gäbe es dazu eine andere sinnvolle Lösung als mit einer weiteren Variablen?
2009-09-23T09:58:23 sid burnIch finde das zwischen kopieren allerdiengs nicht wirklich schwer. Was wäre den sinvoller?
for @arr -> $i is copy { ... }
1
2
3
4
5
6
7
8
9
10
11
12
#!/usr/bin/env perl6
my @arr = <hallo welt>;
for @arr -> $i is copy {
$i = 'asd';
}
@arr.perl.say;
for @arr -> $i {
$i = 'asd';
}
@arr.perl.say;