Karte mit Split & Schneiden in Perl
Wie verwende ich die Karte mit der split-Funktion zum zuschneiden der Bestandteile: $a, $b, $c und $d; von $line?
my ($a, $b, $c, $d, $e) = split(/\t/, $line);
# Perl trim function to remove whitespace from the start and end of the string
sub trim($)
{
my $string = shift;
$string =~ s/^\s+//;
$string =~ s/\s+$//;
return $string;
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nicht mit Prototypen der
($)
auf Ihre Funktion, es sei denn, Sie müssen Sie.Vergessen Sie nicht in der oben
s///
gibt die Ersatz-zählen-nicht$_
. So, wir machen das explizit.oder mehr einfach:
map { s/^\s+|\s+$//gr } split('\t', $line)
einsetzbar von perl 5.14map
nimmt zwei Eingänge:split
's-Ausgabe:String::Strip
. Siehe illusori.co.uk/perl/2010/03/05/...isspace
zu Streifen, Räume und hat keine Ahnung von unicode, so dass es sich Verhalten wird, anders als die oben genannten.Sollte dies funktionieren:
Durch die Art und Weise, es ist ein kleiner Punkt, aber Sie sollten nicht verwenden, sondern $a und $b als Variablen-Namen.
Können Sie auch mit "foreach" hier.
Nur für Abwechslung:
grep
wirkt wie ein filter auf Listen. Dies ist der Grund, warum die\s+
s müssen geändert werden, um\s*
s innerhalb der regex. Zwang passt auf 0 oder mehr Leerzeichen verhindert, dassgrep
aus filtern von Elementen in der Liste, die keine führenden oder nachfolgenden Leerzeichen."\tspoon\t"
würde, weggelassen werden.perlretut
: "\s
entspricht einem whitespace-Zeichen, die gesetzt[\ \t\r\n\f]
und andere." Außerdem sind wir nicht die Teilung auf\t
hier ;)?\s*
mit meiner üblichen\s+
. Also die subst entspricht immer und ich weiß nicht, was ich Rede. 😀Wenn ich schneiden Sie ein string ist, habe ich nicht oft das original behalten wollen. Es wäre schön, um die Abstraktion eines sub aber auch nicht zu viel Aufhebens mit temporären Werte.
Es stellt sich heraus, dass wir genau dies tun, als perlsub erklärt:
In deinem Fall
trim
wirdDenken Sie daran, dass
map
undfor
sind cousins, also mit der Schleife intrim
brauchen Sie nicht mehr übermap
. Zum BeispielAusgabe:
=>
) gibt nur eine bessere visuelle Trennung als,
. Ich habe es mir aus diesem Grund. Wie in diesem Fallkeyword => qw<a list of words>
nichts unterscheidet Sie in der Liste erstellt, aber ich bin mir zu zeigen, wie ich bin, denken Sie. Ich verwenden, wenn für diese Zeiten, die ich will, die visuelle Trennung zu porträtieren, was die Semantik.join(", " => ...)
, und wenn das Trennzeichen ein Komma enthält, verwende ich gerne das Fett Komma für die Lesbarkeit.print "BEFORE: ". join ' ', map { '['.$_.']' } ($a, $b, $c, $d);