Leser: 25
2010-01-14T15:43:25 tobyyyich würde gerne einen String so bearbeiten, dass
ab dem ersten Leerzeichen alles entfernt wird.
1 2 3
my $test="Das ist eine Test"; my ($first)=split(/\s/,$test,2); print "$first\n"
1 2 3
my $test="Das ist eine Test"; my ($first)=$test=~/^(.+?)\s/; print "$first\n"
1 2 3
my $test="Das ist eine Test"; my $first=substr($test,0,index($test,' ')-1); print "$first\n"
$string =~ s/ .*//;
2010-01-15T12:16:33 tobyyy($string,$dummy) = split(/\s+/, $_stringzumschneiden);
2010-01-15T12:37:36 GwenDragonDa hast du dich wohl vertan. ;)
2010-01-15T12:42:02 bianca[...] Sollte man aber hier ohnehin nicht verwenden, weil ja die Anzahl Elemente aus dem split ohnehin unbekannt ist [...]
2010-01-15T13:48:10 murphyWird split in einer Listenzuweisung fixer Länge gebraucht
2010-01-15T14:05:44 sid burnMurphy spricht davon wenn du "($string) = split ..." schreibst das du hier eine Fixe länge von 1 Element erwartest, Perl dann intern dann aber nur einmal splitet und zwei Elemente zurück gibt zur Optimierung. Also immer "Fixe Länge + 1".
2010-01-15T14:05:44 sid burn[...]
Also letztendlich weiß man schon die Länge. Bei "($string) = split ..." kommen nur maximal 2 Elemente zurück.
Insgesamt weiß ich aber auch nicht warum Murphy diesen hinweis gegeben hat.
2010-01-15T19:06:33 murphyDaraus folgt zum einen, dass die Aussage, man wisse nicht, wie oft gesplittet würde, einfach nicht stimmt und zum anderen, dass es durchaus einen Unterschied macht, ob man my ($x) = split ... oder my ($x, undef) = split ... oder ähnliches schreibt – mit jeder angehängten Dummyvariable oder undef wird die automatisch ermittelte Maximalzahl von Splits erhöht, was eventuell etwas weniger effizient ist.
2010-01-15T19:18:18 pq1. die info, dass perl das von alleine optimiert
2010-01-15T19:27:14 pqwenn du es an eine liste von skalaren zuweist, splittet perl nur soviel wie nötig. das ist in meinen augen eine optimierung.
2010-01-15T19:35:36 biancaWundern tut mich, dass Perl in diesem Zusammenhang immer plus 1 zu übergeben scheint
1 2 3 4 5 6 7
my $s = "foo;bar"; my ($first) = split /;/, $s, 1; print "first: $first\n"; ($first) = split /;/, $s, 2; print "first: $first\n";
2010-01-15T19:35:36 bianca[...]
Wundern tut mich, dass Perl in diesem Zusammenhang immer plus 1 zu übergeben scheint, was hier als Optimierung hervorgetan wurde. Das kann ich nicht nachvollziehen.
Wann und wo braucht man denn das zweite Element, wenn man nur das erste mittels ()[0] oder ($string) abfragt?
2010-01-15T19:40:59 murphyWenn man als LIMIT genau die Anzahl von Elementen links der Listenzuweisung übergibt, bekommt man im letzten Element der Liste einfach den gesamten Rest der Zeichenkette zurück, selbst wenn darin noch weitere Trennzeichen enthalten sind. Übergibt man als LIMIT eins mehr als die Anzahl von Elementen links der Zuweisung, wird reicht das letzte zugewiesene Element ebenfalls nur bis zu einem Trennzeichen, falls noch eines vorhanden ist.
2010-01-15T19:18:18 pq2. man kann das auch selber optimieren, wenn man an ein array zuweist, indem man den parameter selbst übergibt
2010-01-15T19:12:52 bianca[...]
Hmmm, dass das nicht unglaublich wichtig und zudem weniger effizient und an der Fragestellung völlig vorbei ist, hast Du selbst schon festgestellt.
QuoteGibt es denn auch einen Fall, wo man diese Tatsache sinnvoll einsetzen kann? Ich zumindest hab jetzt gerade noch nicht verstanden, was man mit dieser Info in der Praxis anfangen kann.
[...]
2010-01-15T19:32:27 murphyFerner versuchte ich mit dem ursprünglichen Beitrag die schlichtweg falsche Formulierung, dass man die Anzahl von Resultaten des split-Aufrufes nicht kenne, richtigzustellen. Eine Korrektur einer Aussage scheint mir auch nicht am Thema vorbeizugehen.
2010-01-15T19:48:49 bianca2010-01-15T19:32:27 murphyFerner versuchte ich mit dem ursprünglichen Beitrag die schlichtweg falsche Formulierung, dass man die Anzahl von Resultaten des split-Aufrufes nicht kenne, richtigzustellen.
[...]
Sorry, Murphy, das empfinde ich (Betonung liegt auf "ich empfinde es so")als Klugscheißerei.
[...]
2010-01-15T20:02:33 murphyVielleicht ist es Haarspalterei, Klugscheisserei sollte es eigentlich nicht sein — schließlich habe ich ganz sachlich einen Kommentar abgegeben und nicht versucht, diese Kleinigkeit irgendwie hochzuspielen oder gegen Dich persönlich zu verwenden.
2010-01-15T20:14:10 bianca[...]
Unschön war halt die Unterstellung, ich hätte eine falsche Aussage gemacht. [...]
Da gab es nichts richtig zu stellen, Du hast es schlichtweg anders als gemeint aufgenommen!
Es ging nicht um die Anzahl der Elemente im Sinne des Codes und des Perl-Backends sondern um die Tatsache, dass der Fragesteller i.d.R. nicht weiß, wieviel Blanks da in seinem Text auf ihn zukommen.
Quote[...] weil ja die Anzahl Elemente aus dem split ohnehin unbekannt ist [...]
2010-01-15T13:59:50 biancaIch will nur [0] haben. Insofern ist ($string,$dummy) genauso wie ($string,undef) genauso wie ($string,undef,undef) überflüssig.