Как печать Perl может добавить новую строку по умолчанию?
в Perl большинство моих print
операторы принимают вид
print "hello." . "n";
есть ли хороший способ избежать того, чтобы все надоедливые"n " лежали вокруг?
Я знаю, что могу сделать новую функцию, такую как myprint
это автоматически добавляет n, но было бы неплохо, если бы я мог переопределить существующий print
.
8 ответов:
Perl 6 имеет
say
функция, которая автоматически добавляет\n
.вы также можете использовать
say
в Perl 5.10 или 5.12 если добавитьuse feature qw(say);
к началу вашей программы. Или вы можете использовать Modern:: Perl чтобы получить эту и другие особенности.
посмотреть характеристика perldoc для более подробной информации.
можно использовать
-l
опция в заголовке she-bang:#!/usr/bin/perl -l $text = "hello"; print $text; print $text;
выход:
hello hello
Если Perl 5.10+ не является опцией, вот быстрое и грязное приближение. Это не совсем то же самое, так как say имеет некоторую магию, когда его первый arg является ручкой, но для печати в STDOUT:
sub say {print @_, "\n"} say 'hello';
то, как вы пишете свое заявление о печати, излишне многословно. Там нет необходимости отделять новую строку в свою собственную строку. Этого вполне достаточно.
print "hello.\n";
эта реализация, вероятно, сделает ваше кодирование проще в целом.
В дополнение к использованию
use feature "say"
илиuse 5.10.0
илиuse Modern::Perl
чтобы получить встроенныйsay
особенность, я собираюсь сутенер perl5i который включает много разумных отсутствующих функций Perl 5 по умолчанию.
возможно, вы хотите изменить разделитель выходных записей на перевод строки с помощью:
local $\ = "\n";
$ perl -e 'print q{hello};print q{goodbye}' | od -c 0000000 h e l l o g o o d b y e 0000014 $ perl -e '$\ = qq{\n}; print q{hello};print q{goodbye}' | od -c 0000000 h e l l o \n g o o d b y e \n 0000016
обновление: мой ответ говорит о возможности, а не целесообразности. Я не считаю добавление "\n" в конце строк "надоедливой" рутиной, но если кто-то действительно хочет избежать их, это один из способов. Если бы мне пришлось поддерживать немного кода, который использует эту технику, я бы, вероятно, рефакторинг его Пронто.
в Perl 6 есть,
say
функции