【发布时间】:2015-07-13 16:39:16
【问题描述】:
Perl 的文档说 $/ 是:
输入记录分隔符,默认换行。这会影响 Perl 的 了解什么是“线”。
那么,这样做基本上是错误的:
print STDERR $var, $/;
代替:
print STDERR "$var\n";
?
如果我做前者会出什么问题?
【问题讨论】:
-
它是 input 分隔符,如果您需要读取 CRLF 或 CR 编码的文件,可能会对其进行操作。
-
$/是系统 eol 字符,如果您生成的文件仅用于“本地”使用,这很好。如果您正在为某些其他操作系统生成文件,例如你在 Linux 上构建一个 Windows 文件,那么$/没用。 -
你真的应该使用 output 记录分隔符
$\,但我看不出这样做有什么问题。事实上,sayfunction 就是这样做的:“say LIST只是{ local $\ = "\n"; print LIST }的缩写”(如果您使用的是 5.10+,我会使用say代替。) -
@user3476791:不,Perl 尽力隐藏系统 eol 字符(或序列)并将其作为换行符
"\n"呈现给您的 Perl 代码。当您要使用<>运算符检索的输入记录与文本行不一致时,将使用操作$/。这就是为什么它被称为输入记录分隔符而不是输入行分隔符 -
@Borodin 是正确的,Mark B 是错误的。
$/在任何系统上默认为“\n”; CRLF 翻译通常在 I/O 函数中处理,因此您的代码只会看到/产生“\n”