打印$ /而不是\n是错误的吗?

n.r*_*.r. 15 perl newline

Perl的文档说$/:

输入记录分隔符,默认为换行符.这影响了Perl关于"线"是什么的想法.

那么,基本上是错误的:

print STDERR $var, $/;
Run Code Online (Sandbox Code Playgroud)

代替:

print STDERR "$var\n";
Run Code Online (Sandbox Code Playgroud)

如果我做前者会出现什么问题?

xxf*_*xxx 9

也许您正在寻找输出记录分隔符?

perldoc perlvar:

 IO::Handle->output_record_separator( EXPR )
   $OUTPUT_RECORD_SEPARATOR
   $ORS
   $\

打印操作员的输出记录分隔符.如果已定义,则在打印的最后一个参数之后打印此值.默认为"undef".

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

助记符:你设置" $\"而不是\n在打印结束时添加" ".而且,它就像$/,但它是你从Perl"回来"的东西.

例如,

$\ = $/;
print STDERR $var;
Run Code Online (Sandbox Code Playgroud)

  • 我认为这是一个非常糟糕的主意.没有多少模块可以保护自己免受`$ \`的改变,所以全局改变`$ \`会破坏它们.您可以使用`{local $\= $ /;来限制更改的范围.print STDERR $ var; 但是,与`print STDERR"$ var \n";`或`说STDERR $ var;`相比,这是完全混乱的. (5认同)
  • @ikegami我认为如果模块无法处理`$ \`进行更改,那就是模块中的一个错误,特别是考虑到有一个常用的命令行选项可以设置`$ \`(`-l`) . (2认同)
  • @hvd,通常用于单行,也许,但我怀疑很少有模块在每个'print'之前做`local $ /;`因为即使你认为它是一个bug也是愚蠢的. (2认同)

ike*_*ami 7

$/默认为LF(U + 000A).这与"\n"[1]产生的字符相同.所以,除非你改变$/,$/并且"\n"是等同的.如果的确发生了变化$/,那么只有你知道是什么原因,所以只有你知道$/或者"\n"是比较合适的.


  1. 在古老的MacOS盒子上,$/默认是CR(U + 000D),但这也是那里"\n"产生的.