En Perl, la plupart de mes print
déclarations prennent la forme
print "hello." . "\n";
Existe-t-il un moyen efficace d'éviter de laisser traîner tous les "\ n" embêtants?
Je sais que je pourrais créer une nouvelle fonction telle que myprint
celle-ci ajoute automatiquement \ n, mais ce serait bien si je pouvais remplacer l'existant print
.
perldoc perlvar
décrit la plupart des mises en garde, pourquoi les insister ici?Réponses:
Perl 6 a la
say
fonction qui ajoute automatiquement\n
.Vous pouvez également utiliser
say
en Perl 5.10 ou 5.12 si vous ajoutezau début de votre programme. Ou vous pouvez utiliser Modern :: Perl pour obtenir ceci et d'autres fonctionnalités.
Voir la fonctionnalité perldoc pour plus de détails.
la source
use 5.012;
ouuse 5.010;
pour l' obtenir si vous utilisez ces nouvellesperl
s.Vous pouvez utiliser l'
-l
option dans l'en-tête she-bang:Production:
la source
perl
options, y compris ce qui-l
est en cours, ici .Si Perl 5.10+ n'est pas une option, voici une approximation rapide et sale. Ce n'est pas exactement la même chose, puisque say a un peu de magie quand son premier argument est un handle, mais pour imprimer vers STDOUT:
la source
La façon dont vous rédigez votre déclaration d'impression est inutilement verbeuse. Il n'est pas nécessaire de séparer la nouvelle ligne dans sa propre chaîne. Cela suffit.
Cette réalisation facilitera probablement votre codage en général.
En plus d'utiliser
use feature "say"
ouuse 5.10.0
ouuse Modern::Perl
pour obtenir lasay
fonctionnalité intégrée, je vais pimp perl5i qui active par défaut de nombreuses fonctionnalités sensibles de Perl 5.la source
Peut-être voulez-vous changer votre séparateur d'enregistrement de sortie en saut de ligne avec:
local $\ = "\n";
Mise à jour: ma réponse parle de capacité plutôt que d'opportunité. Je ne considère pas l'ajout de "\ n" à la fin des lignes comme une corvée "embêtante", mais si quelqu'un veut vraiment les éviter, c'est une solution. Si je devais maintenir un peu de code qui utilise cette technique, je le refactoriserais probablement pronto.
la source
"helo\r\n"
qui envoie maintenant"helo\r\n\n"
.local $\ = "\n";
-l
est idéale pour les one-liners de ligne de commande (voir perldoc.perl.org/perlrun.html#Command-Switches ). Je ne le recommanderais pas dans un programme plus vaste.Voici ce que j'ai trouvé sur https://perldoc.perl.org/perlvar.html :
exemple:
la source
En Perl 6, il y a, la
say
fonctionla source
Si vous êtes bloqué avec la version antérieure à 5.10, les solutions fournies ci-dessus ne répliqueront pas complètement la
say
fonction. Par exempleNe fonctionnera pas avec des invocations telles que
ou
... parce que la fonction ci-dessus n'agit pas sur le
$_
like global impliciteprint
et lasay
fonction réelle .Pour répliquer plus fidèlement le perl 5.10+,
say
vous voulez cette fonctionQui agit maintenant comme ça
L'
say
intégré dans perl6 se comporte un peu différemment. L'appeler avecsay @arr
ou@arr.say
ne concaténera pas simplement les éléments du tableau, mais les affichera à la place séparés par le séparateur de liste. Pour répliquer cela dans perl5, vous feriez$"
est la variable de séparation de liste globale, ou si vous utilisez,English.pm
alors est est$LIST_SEPARATOR
Il agira maintenant plus comme perl6, comme ça
la source