Perldoc: -f chomp

Aus Wikibooks
  • chomp VARIABLE
  • chomp( LIST )
  • chomp


Diese sicherere version von chop entfernt jeden angehängten String, der dem momentanen Wert von $/ entspricht (auch bekannt als $INPUT_RECORD_SEPERATOR im English Modul). Sie gibt die Anzahl aller Zeichen zurück, die von den Argumenten entfernt wurden. Ausserdem wird sie oft benutzt, um Zeilenumbrüche vom ende einer Eingabezeile zu entfernen wenn man sich nicht sicher ist, ob die Zeile einen Zeilenumbruch enthält. Im Absatzmodus ($/ = ""), entfernt sie alle anhängenden Zeilenmbrüche von einem String. Im "slurp" Modus ($/ = undef) order im Feste-Länge-Modus ($/ ist eine Referenz auf einen Integer oder etwas ähnliches, siehe perlvar) wird chomp() nichts entfernen. Ohne Argumente wirde $_ gechompt. Beispiel:

while (<>) {
   chomp;   # avoid \n on last field
   @array = split(/:/);
   # ...
}

Falls VARIABLE ein Hash ist, so werden die Werte aber nicht die Schlüssel des Hashs gechompt.

Du kannst eigentlich alles chompen, was ein lvalue ist, inclusive einer Zuweisung:

chomp($cwd = `pwd`);
chomp($answer = <STDIN>);

Falls du eine Liste chompst, wird jedes Element gechompt und die Anzahl aller entfernten Zeichen zurückgegeben.

Falls das encoding Pragma eingeschaltet ist, wird die zurückgegebene Länge aus der Länge von $/ in Unicode Zeichen berechnet, die nicht unbedingt mit der Länge von $/ in nationaler Codierung übereinstimmen muss.

Beachte, dass Klammern überall da nötig sind, wo du irgend etwas chompst, das keine einfache Variable ist. Denn chomp $cwd = `pwd`; wird als (chomp $cwd) = `pwd`; interpretiert und nicht als chomp( $cwd = `pwd` ); wie man es evtl. erwarten würde. Ähnlich wird chomp $a, $b als chomp($a), $b interpretiert und nicht als chomp($a, $b).