В Perl большая часть из моего print
операторы принимают форму
print "hello." . "\n";
Существует ли хороший способ постараться не сохранять весь противный "\n" s лежащий вокруг?
Я знаю, что мог сделать новую функцию таким как myprint
это автоматически добавляет \n, но было бы хорошо, если я мог бы переопределить существующее print
.
Perl 6 имеет функцию say
, которая автоматически добавляет \ n
.
Вы также можете использовать , скажем,
в Perl 5.10 или 5.12, если вы добавите
use feature qw(say);
в начало вашей программы. Или вы можете использовать Modern :: Perl , чтобы получить эту и другие возможности.
Подробнее см. функция perldoc .
Вы пишете оператор печати излишне многословно. Нет необходимости разделять новую строку на отдельную строку. Этого достаточно.
print "hello.\n";
Эта реализация, вероятно, упростит вам кодирование в целом.
В дополнение к использованию используйте функцию "say"
или используйте 5.10.0
или используйте 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 5.10+ не подходит, вот быстрое и грязное приближение. Это не совсем то же самое, поскольку say имеет некоторую магию, когда его первый аргумент является дескриптором, но для печати в STDOUT:
sub say {print @_, "\n"}
say 'hello';