In Perl haben die meisten meiner print
Aussagen die Form
print "hello." . "\n";
Gibt es eine gute Möglichkeit, um zu vermeiden, dass all die nervigen "\ n" herumliegen?
Ich weiß, dass ich eine neue Funktion wie myprint
diese erstellen könnte, die automatisch angehängt wird \ n, aber es wäre schön, wenn ich die vorhandene überschreiben könnte print
.
perldoc perlvar
beschreibt die meisten Vorbehalte, warum sie hier näher erläutern?Antworten:
Perl 6 hat die
say
Funktion, die automatisch angehängt wird\n
.Sie können auch
say
Perl 5.10 oder 5.12 verwenden, wenn Sie hinzufügenzum Anfang Ihres Programms. Oder Sie können Modern :: Perl verwenden , um diese und andere Funktionen zu erhalten.
Weitere Informationen finden Sie unter Perldoc-Funktion .
quelle
use 5.012;
oder esuse 5.010;
zu bekommen, wenn Sie diese neuerenperl
s ausführen .Sie können die
-l
Option in der She-Bang-Kopfzeile verwenden:Ausgabe:
quelle
perl
Informationen zu Optionen, einschließlich der aktuellen-l
Aktivitäten, finden Sie hier .Wenn Perl 5.10+ keine Option ist, finden Sie hier eine schnelle und schmutzige Annäherung. Es ist nicht genau das gleiche, da say etwas Magie hat, wenn sein erstes Argument ein Handle ist, aber zum Drucken an STDOUT:
quelle
Die Art und Weise, wie Sie Ihre Druckanweisung schreiben, ist unnötig ausführlich. Es ist nicht erforderlich, die Newline in eine eigene Zeichenfolge zu unterteilen. Das ist ausreichend.
Diese Erkenntnis wird wahrscheinlich Ihre Codierung im Allgemeinen erleichtern.
Zusätzlich zur Verwendung
use feature "say"
oderuse 5.10.0
oderuse Modern::Perl
zum Erhalt der integriertensay
Funktion werde ich perl5i pimpen, wodurch standardmäßig viele sinnvolle fehlende Perl 5-Funktionen aktiviert werden.quelle
Vielleicht möchten Sie Ihr Trennzeichen für Ausgabedatensätze in Zeilenvorschub ändern mit:
local $\ = "\n";
Update: Meine Antwort spricht eher für Fähigkeiten als für Ratsamkeit. Ich halte das Hinzufügen von "\ n" am Ende von Zeilen nicht für eine "lästige" Aufgabe, aber wenn jemand sie wirklich vermeiden möchte, ist dies eine Möglichkeit. Wenn ich ein bisschen Code pflegen müsste, der diese Technik verwendet, würde ich ihn wahrscheinlich sofort umgestalten.
quelle
"helo\r\n"
die jetzt sendet"helo\r\n\n"
.local $\ = "\n";
-l
eignet sich hervorragend für Befehlszeilen-Einzeiler (siehe perldoc.perl.org/perlrun.html#Command-Switches ). Ich würde es in keinem größeren Programm empfehlen.Folgendes habe ich unter https://perldoc.perl.org/perlvar.html gefunden :
Beispiel:
quelle
In Perl 6 gibt es die
say
Funktionquelle
Wenn Sie mit Pre-5.10 nicht weiterkommen, wird die
say
Funktion durch die oben angegebenen Lösungen nicht vollständig repliziert . BeispielsweiseFunktioniert nicht mit Aufrufen wie
oder
... weil die obige Funktion nicht auf das implizite globale
$_
Likeprint
und die realesay
Funktion einwirkt.Um das Perl 5.10+ genauer zu replizieren, möchten
say
Sie diese FunktionWas jetzt so wirkt
Das
say
eingebaute perl6 verhält sich etwas anders. Wenn Sie es mitsay @arr
oder@arr.say
ohne Verkettung der Array-Elemente aufrufen, werden sie stattdessen getrennt mit dem Listentrennzeichen gedruckt. Um dies in perl5 zu replizieren, würden Sie dies tun$"
ist die globale Listentrennvariable, oder wenn Sie verwenden,English.pm
ist es$LIST_SEPARATOR
Es wird sich jetzt eher wie perl6 verhalten
quelle