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

时间:2015-07-13 16:39:17

标签: perl newline

Perl的文档说$/是:

  

输入记录分隔符,默认为换行符。这会影响Perl's   什么是"线"是

所以,基本上是错误的:

print STDERR $var, $/;

而不是:

print STDERR "$var\n";

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

3 个答案:

答案 0 :(得分:9)

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

  

perldoc perlvar

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

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

     

你不能打电话给" output_record_separator()"在句柄上,仅作为静态方法。请参阅IO::Handle

     

助记符:你设置" $\"而不是添加" \n"在印刷结束时。此外,它就像$/,但它是你得到的"返回"来自Perl。

例如,

$\ = $/;
print STDERR $var;

答案 1 :(得分:7)

$/默认为LF(U + 000A)。这是由"\n" [1] 生成的相同字符。因此,除非您更改$/,否则$/"\n"是等效的。如果您确实更改了$/,那么只有您知道原因,因此只有您知道$/"\n"是否更合适。

  1. 在古老的MacOS包装盒上,$/的默认值是CR(U + 000D),但这也是"\n"在那里制作的。

答案 2 :(得分:1)

您需要输出记录分隔符$ \,因为xxfelixxx已经回答。

您阅读的{p> $/input record separator。操作它可能会影响Perl读取您提供的文件数据的方式。例如:

open my $fh, "<", $filename or die $!;
local $/; # enable localized slurp mode
my $content = <$fh>;
close $fh;

以上原因导致文件的整个内容在标量$内容中悄悄进行,因为我们已重置$/

考虑以下代码:

#!/usr/bin/perl
use strict;
use warnings;
my $content;
{local $/; $content = <DATA>}
print "Content is $content";
__DATA__
line 1
line 2
line 3

输出:

Content is line 1
line 2
line 3

但是如果你没有重置$ /,就像下面的代码一样:

#!/usr/bin/perl
use strict;
use warnings;
my $content = <DATA>;
print "Content is $content";
__DATA__
line 1
line 2
line 3

输出为Content is line 1

这是因为输入记录分隔符设置为换行符,并在第一行后返回。