Perl的文档说,$/
是:
输入记录分隔符,默认为换行符。这影响了Perl认为“一行”是什么的想法。
那么,基本上这么做是错误的吗:
print STDERR $var, $/;
替代:
print STDERR "$var\n";
?
如果我选择前者,可能会出什么问题?
$\
”而不是在print的末尾添加“\n
”。此外,它就像$/
,但这是您从Perl“返回”的内容。$\ = $/;
print STDERR $var;
$\
变化的影响,因此全局更改$\
将会导致它们崩溃。你可以使用{local $\ = $/; print STDERR $var;}
来限制更改的范围,但与print STDERR "$var\n";
或say STDERR $var;
相比,这是一种完全混乱的方式。 - ikegami$ \ -
的更改,那么这就是模块中的一个错误,特别是考虑到有一个常用的命令行选项可以设置$ \ -
(-l
)。 - user743382print
之前都执行local $/;
,因为这样做是愚蠢的,即使你认为它是一个错误。 - ikegami$/
默认情况下是 LF (U+000A)。 这就是"\n"
[1]产生的相同字符。 因此,除非您更改了$/
,否则$/
和"\n"
是等价的。 如果您更改了$/
,那么只有您知道原因,因此只有您知道$/
或"\n"
哪个更合适。
$/
的默认值为 CR(U+000D),但在这种情况下 "\n"
也会产生相同的字符。$/
是输入记录分隔符
。操作它可以影响Perl读取提供的文件数据的方式。例如:open my $fh, "<", $filename or die $!;
local $/; # enable localized slurp mode
my $content = <$fh>;
close $fh;
$/
,所以上述代码将整个文件内容读入标量变量$content中。#!/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
输出将为内容是第1行
。
这是因为输入记录分隔符被设置为换行符,并在第一行后返回。
$/
是系统的行尾符号,如果你生成的文件只是用于“本地”使用,那么这是可以的。但如果你要为其他操作系统生成文件,例如在 Linux 上构建 Windows 文件,则$/
就无用了。 - Marc B$ \
,但我看不出这样做有什么问题。事实上,say
函数就是这样做的: "say LIST
只是{local $\="\n";print LIST}
的缩写"(如果你使用的是5.10+版本,我会直接使用say
)。 - ThisSuitIsBlackNot"\n"
传递给您的Perl代码。当您想要检索使用<>
运算符的输入记录与文本行不一致时,才需要操作$/
。这就是为什么它被称为输入记录分隔符而不是输入行分隔符的原因。 - Borodin$/
在任何系统上默认为“\n”;CRLF 转换通常在 I/O 函数中处理,因此您的代码只会看到/生成“\n”。 - ysth