Perl的打印如何在默认情况下添加换行符?

Mik*_*ike 89 printing perl newline

在Perl中,我的大多数print陈述都采用了这种形式

print "hello." . "\n";
Run Code Online (Sandbox Code Playgroud)

有没有一种很好的方法可以避免让所有讨厌的人"躺着"?

我知道我可以创建一个新的功能,例如myprint自动附加\n,但如果我可以覆盖现有的那么会很好print.

Jos*_*ley 95

Perl 6具有say自动附加的功能\n.

say如果添加,也可以在Perl 5.10或5.12中使用

use feature qw(say);
Run Code Online (Sandbox Code Playgroud)

到你的程序的开头.或者您可以使用Modern :: Perl来获取此功能和其他功能.

有关详细信息,请参阅perldoc功能.

  • 事实上,你所要做的就是`使用5.012;`或`使用5.010;`来获得它,如果你正在运行那些更新的`perl`. (7认同)

jay*_*ngh 33

您可以使用-lshe-bang标题中的选项:

#!/usr/bin/perl -l

$text = "hello";

print $text;
print $text;
Run Code Online (Sandbox Code Playgroud)

输出:

hello
hello
Run Code Online (Sandbox Code Playgroud)

  • 非常好.更多关于`perl`选项,包括`-l`正在做什么,[这里](http://www.perl.com/pub/2004/08/09/commandline.html). (3认同)

Eri*_*rom 24

如果Perl 5.10+不是一个选项,这里是一个快速而肮脏的近似值.它并不完全相同,因为当它的第一个arg是一个句柄时,说有一些魔法,但是要打印到STDOUT:

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

say 'hello';
Run Code Online (Sandbox Code Playgroud)


Sch*_*ern 19

你编写print语句的方式是不必要的冗长.没有必要将换行符分隔为自己的字符串.这就足够了.

print "hello.\n";
Run Code Online (Sandbox Code Playgroud)

这种实现可能会使您的编码更容易.

除了使用use feature "say"use 5.10.0use Modern::Perl让内置的say功能,我要皮条客perl5i其默认启用了很多明智的缺失Perl 5种的功能.


Dav*_*d M 9

也许您想要将输出记录分隔符更改为换行符:

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
Run Code Online (Sandbox Code Playgroud)

更新:我的回答是关于能力而不是可行性.我不认为在行尾添加"\n"是一个"讨厌的"苦差事,但如果有人真的想要避免它们,这是一种方式.如果我不得不维护一些使用这种技术的代码,我可能会重构它.

  • 不,请不要那样做.虽然从技术上讲是一个正确的答案,但使用一个特殊的变量可以解决这个问题,因为这是一个维护负担. (6认同)
  • 或者只是`perl -le'print q {hello}; print q {goodbye}'` (5认同)

小智 8

这是我在https://perldoc.perl.org/perlvar.html找到的内容:

$\ 打印操作符的输出记录分隔符。如果定义了,该值将在 print 的最后一个参数之后打印。默认为 undef。

您不能在句柄上调用output_record_separator(),只能作为静态方法。请参阅 IO::句柄。

助记:您设置 $\ 而不是在打印末尾添加“\n”。另外,它就像 $/ 一样,但它是您从 Perl“返回”的内容。

例子:

$\ = "\n";
print "a newline will be appended to the end of this line automatically";
Run Code Online (Sandbox Code Playgroud)