1 2 3 4 5 6
my @unsorted = <IN>; my @sorted = sort { (my $first) = $a =~ m/chr(.+)/; (my $second) = $b =~ m/chr(.+)/; #### hier muss etwas hin } @unsorted;
1 2
my @unsorted = <IN>; my @sorted = sort {($a=~/chr(\d+)/)[0] <=> ($b=~/chr(\d+)/)[0]}@unsorted;
1 2
my @unsorted = <IN>; my @sorted = map{$_->[0]} sort {$a->[1] <=> $b->[1]} map{/chr(\d+)/;$_=[$_,$1]}@unsorted;
1 2 3 4 5 6
my @unsorted = <IN>; my @sorted = sort { (my $first) = $a =~ m/chr(.+)/; (my $second) = $b =~ m/chr(.+)/; $first cmp $second || $first <=> $second } @unsorted;
2013-02-05T20:24:02 Student87Edit 2: Wenn ich in Code 1 von topec d durch nen Punkt . ersetze, um auch X und Y zu matchen, bekomme ich diese Meldungen:
Use of uninitialized value in numeric comparison (<=>) at ./Skript line 9, <IN> line 77.
...
Edit 3: Wieso denn "uninitialized value" ? Wie kann das sein, wenn ich nen Punkt benutze, matche ich doch immer und der value ist da/initialized ?
my @sorted = map{$_->[0]} sort {$a->[1] <=> $b->[1]} map{/chr(\d+)/;$_=[$_,$1]}@unsorted;
1 2 3 4 5 6 7 8 9 10 11 12 13 14
# Schritt 1: # Nimm elementweise vom @unsorted, # extrahiere alles nach 'chr', # speichere das Element und den Extrakt als "Wertepaar" in einem anonymen Array map { /chr(\d+)/; $_ = [$_, $1] } @unsorted; # Schritt 2: # sortiere die Wertepaare (bzw. ihre Referenzen) nach Element 1 (dem Extrakt) sort { $a->[1] <=> $b->[1] } # Schritt 3: # nimm aus den sortierten Wertepaaren nur das erste Element, # mach eine Liste daraus in der Reihenfolge aus Schritt 2 map{ $_->[0] }
1 2 3 4
my @unsorted = <IN>; my @sorted = sort { ($a=~/chr([A-Z])/)[0] cmp ($b=~/chr([A-Z])/)[0] || ($a=~/chr(\d+)/)[0] <=> ($b=~/chr(\d+)/)[0] } @unsorted;
1 2 3 4 5 6 7 8 9 10
my @sorted = # stelle aus der sortierten Liste von Array-Referenzen das Original wieder her # (dereferenziere jeweils das 1. Element) map { $_->[0] } # 2. sortiere nach dem gewünschten Kriterium (2. Element in Referenz) sort { $a->[1] <=> $b->[1] } # 1. jedes Element aus @unsorted wird ersetzt durch eine Array-Referenz, # die das Original und unser Sortierkriterium enthaelt map { m/chr(\d+)/; $_ = [ $_, $1 ] } @unsorted;
QuoteIch wußte nicht, dass die einzelnen Funktionen mit den Ergebnissen der weiter rechts stehenden Funktion weiterarbeiten. So eine Syntax hätte ich schneller verstanden:
my @sorted = map(Anweisung) {sort(Anweisung) {map(Anweisung){@unsorted} } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
my @sorted = map{ $_ = $_->[0] } sort { if($a->[2] and $b->[2]) { $_ = $a->[2] cmp $b->[2]; } elsif($a->[2] and !$b->[2]) { $_ = 1; } elsif(!$a->[2] and $b->[2]) { $_ = -1; } else { $_ = $a->[1] <=> $b->[1]; } } map { my ($n) = $_ =~ /chr(\d+)/; my ($s) = $_ =~ /chr(\D+)/; $s = '' if( !$s ); $n = 0 if( !$n ); $_ = [$_,$n,$s]; } @unsorted;
1 2 3 4 5 6 7 8 9
my @sorted = map { $_->[0] } sort { $a->[1] <=> $b->[1] } map{ /chr(.+)/; if ($1 eq "X") { $1=23 }; if ($1 eq "Y") { $1=24 }; $_=[$_,$1] } @unsorted;
1 2 3 4 5 6 7 8 9 10
my @sorted = map{$_->[0]} sort {$a->[1] <=> $b->[1]} map{ /chr(.+)/; my $x = $1; if ($x eq "X\r\n") {$x=23} if ($x eq "Y\r\n") {$x=24} $_=[$_,$x] } @unsorted;
s/\r\n?//g;
1 2 3 4 5 6 7 8 9 10 11 12 13
my @sorted = map{$_->[0]} sort {$a->[1] <=> $b->[1]} map{ $/ = "\r\n"; chomp; /chr(.+)/; my $x = $1; if ($x eq "X") {$x=23} if ($x eq "Y") {$x=24} $_=[$_,$x] } @unsorted; } @unsorted;
1 2 3 4 5 6 7
my @unsorted = <HANDLE>; { local $/ = "\r\n"; chomp @unsorted; } my @unsorted = ...;
1
2
3
4
5
6
7
8
# mit .+ landet \r in $1
$ perl -MData::Dumper -we '$Data::Dumper::Useqq = 1; $a="Hallo\r\n"; $a =~ m/(.+)/; print Dumper $1;'
$VAR1 = "Hallo\r";
# mit \S+ landet kein \r in $1
$ perl -MData::Dumper -we '$Data::Dumper::Useqq = 1; $a="Hallo\r\n"; $a =~ m/(\S+)/; print Dumper \$1;'
$VAR1 = "Hallo";
$
1
2
3
4
5
6
7
8
9
10
my @sorted =
map{$_->[0]}
sort {$a->[1] <=> $b->[1]}
map{
/chr(\w+)/;
my $x = $1;
if ($x eq "X") {$x=23}
if ($x eq "Y") {$x=24}
$_=[$_,$x]
} @unsorted;
Quote\s matches a whitespace character, the set [\ \t\r\n\f] and others
...
\S is a negated \s; it represents any non-whitespace character [^\s]
2013-02-07T15:51:29 LinuxerDas MacOSX ist aucn nur angepasstes Linux.Und auch auf einem Mac (womit ich keine Erfahrung habe) sollte das IMHO so sein.
my $s = "blah, blubb\r";
1 2 3
use Data::Dumper; # Modul laden $Data::Dumper::Useqq = 1; # Nichtdarstellbare Zeichen als oktal \xxx oder Zeichen \x ausgeben print Dumper( $s ); # Dump der Variablen