Как печать Perl может добавить новую строку по умолчанию?

В Perl большая часть из моего print операторы принимают форму

print "hello." . "\n";

Существует ли хороший способ постараться не сохранять весь противный "\n" s лежащий вокруг?

Я знаю, что мог сделать новую функцию таким как myprint это автоматически добавляет \n, но было бы хорошо, если я мог бы переопределить существующее print.

89
задан brian d foy 25 May 2010 в 04:56
поделиться

5 ответов

Perl 6 имеет функцию say , которая автоматически добавляет \ n .

Вы также можете использовать , скажем, в Perl 5.10 или 5.12, если вы добавите

use feature qw(say);

в начало вашей программы. Или вы можете использовать Modern :: Perl , чтобы получить эту и другие возможности.

Подробнее см. функция perldoc .

95
ответ дан 24 November 2019 в 07:16
поделиться

Вы пишете оператор печати излишне многословно. Нет необходимости разделять новую строку на отдельную строку. Этого достаточно.

print "hello.\n";

Эта реализация, вероятно, упростит вам кодирование в целом.

В дополнение к использованию используйте функцию "say" или используйте 5.10.0 или используйте Modern :: Perl , чтобы получить встроенный say , я собираюсь использовать perl5i , который по умолчанию включает многие разумные отсутствующие функции Perl 5.

19
ответ дан 24 November 2019 в 07:16
поделиться

Возможно, вы захотите изменить разделитель выходной записи на перевод строки с помощью:

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" в конце строк "досадной" рутиной, но если кто-то действительно хочет их избежать, это один из способов. Если бы мне пришлось поддерживать небольшой код, использующий эту технику, я бы, вероятно, быстро реорганизовал его.

9
ответ дан 24 November 2019 в 07:16
поделиться

В Perl 6 есть функция say

3
ответ дан 24 November 2019 в 07:16
поделиться

Если Perl 5.10+ не подходит, вот быстрое и грязное приближение. Это не совсем то же самое, поскольку say имеет некоторую магию, когда его первый аргумент является дескриптором, но для печати в STDOUT:

sub say {print @_, "\n"}

say 'hello';
24
ответ дан 24 November 2019 в 07:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: