1 2 3 4 5 6 7 8 9 10
# Alle Dateinamen in ein Array einlesen my @files = sort { $b <=> $a } # numerisch sortieren glob qw(*.txt); # alle Textdateien des Verzeichnis # alle Dateien verarbeiten for my $filename(@files) { open($filename) or die "$filename: $!); # weitere Verarbeitung close($filename) or die "$filename: $!); }
1 2 3 4 5 6 7 8 9 10
my @files = qw(3_xy.txt 10_foo.txt 2_bar.txt 1_foobar.txt); @files = map { $_->[0] } sort { $b->[0] <=> $a->[0] } map { [split(/_/, $_)] } @files; foreach my $file (@files){ print "$file\n"; }
1 2 3 4 5 6 7 8 9 10 11 12
use strict; my @files = qw(3_xy.txt 10_foo.txt 2_bar.txt 1_foobar.txt); my @meta = map { join("_", $_->[0], $_->[1]) } sort { $b->[0] <=> $a->[0] } map { [split "_"] } @files; foreach my $file (@meta){ print "$file\n"; }
2011-04-05T07:17:26 GwenDragonWarum diese map-sort-map-Orgie?
Der "Raumschiffoperator" <=> reicht doch hier auch für das numerische Sortieren.
Erkläre doch bitte warum du das verwenden würdest.
2011-04-05T07:41:51 GwenDragonIch habe das mal getestet. Wenn die Schwarzsche Transformation verwendet wird, kann sich das im Vergleich zur numerischen Sortierung um den eine Verschnellerung von 10:1 handeln. Insofern ist die Verwendung sinnvoll.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
use warnings; use strict; my @files = qw( 3_xy.txt 10_foo.txt 2_bar.txt 1_foobar.txt 5_anton.txt 7_berta.txt 9_claus.txt ); @files = map { join('_', $_->[0], $_->[1]) } sort { $a->[1] cmp $b->[1] } map { [/^(.*)_(.*)$/] } @files; foreach my $file (@files){ print "$file\n"; }
1 2 3 4
@files = map { $_->[0].'_'.$_->[1] } sort { $a->[1] cmp $b->[1] } map { [/^(.*)_(.*)$/] } @files;
1 2 3 4
@files = map { $_->[1] } sort { $a->[0] cmp $b->[0] } map { [/_(\w+)\.txt$/, $_] } @files;
2011-04-05T08:17:52 TaulmarillEs macht bei Schwartzscher Transformation übrigens IMHO Sinn, wenn man den ursprünglichen Wert im Original mit transportiert, dadurch werden Fehler beim wieder zusammenbauen vermieden:
Code (perl): (dl )1 2 3 4@files = map { $_->[1] } sort { $a->[0] cmp $b->[0] } map { [/_(\w+)\.txt$/, $_] } @files;