我正在 Perl 中通过 CGI 读取文本文件,并注意到当文件保存在 mac 的 textEdit 中时,行分隔符可以被识别,但是当我上传直接从 Excel 导出的 CSV 时,它们不能被识别。我猜这是一个 \n 与 \r 问题,但这让我想到,如果我不想要它正在寻找的那个,我不知道如何指定我想要的行终止符标记默认情况下。
是的。你会想要覆盖的值$/
. From perlvar
$/
输入记录分隔符,默认换行。这影响了 Perl 关于什么是“线”的想法。与 awk 的 RS 变量类似,包括将空行视为终止符(如果设置为空字符串)。 (空行不能包含任何空格或制表符。)您可以将其设置为多字符字符串以匹配多字符终止符,或设置为 undef 以读取文件末尾。如果文件包含连续的空行,则将其设置为“\n\n”与设置为“”略有不同。设置为“”会将两个或多个连续空行视为单个空行。设置为“\n\n”将盲目地假设下一个输入字符属于下一个段落,即使它是换行符。 (助记:/ 在引用诗歌时界定行边界。)
local $/; # enable "slurp" mode
local $_ = <FH>; # whole file now here
s/\n[ \t]+/ /g;
请记住:$/ 的值是一个字符串,而不是正则表达式。 awk 必须在某些方面做得更好。 :-)
将 $/ 设置为对整数、包含整数的标量或可转换为整数的标量的引用将尝试读取记录而不是行,最大记录大小为引用的整数。所以这:
local $/ = \32768; # or \"32768", or \$var_containing_32768
open my $fh, "<", $myfile or die $!;
local $_ = <$fh>;
将从 FILE 中读取不超过 32768 字节的记录。如果您不是从面向记录的文件中读取(或者您的操作系统没有面向记录的文件),那么每次读取时您可能都会获得完整的数据块。如果记录大于您设置的记录大小,您将把记录分块取回。尝试将记录大小设置为零或更小将导致读取整个文件(其余部分)。
在 VMS 上,记录读取是通过与 sysread 等效的方式完成的,因此最好不要在同一文件上混合记录和非记录读取。 (这不太可能成为问题,因为您想要在记录模式下读取的任何文件在行模式下可能无法使用。)非 VMS 系统执行正常的 I/O,因此混合记录和非记录读取是安全的一个文件的。
另请参阅 perlport 中的“换行符”。另见$..
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)