Perl的文档说$/
是:
输入记录分隔符,默认为换行符。这会影响Perl's 什么是"线"是
所以,基本上是错误的:
print STDERR $var, $/;
而不是:
print STDERR "$var\n";
如果我做前者会出现什么问题?
答案 0 :(得分:9)
也许您正在寻找输出记录分隔符?
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"
是否更合适。
$/
的默认值是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
。
这是因为输入记录分隔符设置为换行符,并在第一行后返回。