为什么Perl';两个arg open似乎在剥离新线?

为什么Perl';两个arg open似乎在剥离新线?,perl,filesystems,Perl,Filesystems,当我使用包含尾随换行符的文件名调用perl的两个argopen()时,会忽略换行符。然而,三个arg版本保留了换行符 为什么行为不同?为什么新线表面上被剥去了 --文件“nl”不存在。成功 $ls-1 nl;触摸nl;ls-1 nl ls:nl:没有这样的文件或目录 nl --尝试打开三个参数“nl\n”→ 埃诺特 斯特拉斯展示了我所期望的行为,FWIW $ perl -E 'open(F, "<", "nl\n") or die $!' No such file or directory

当我使用包含尾随换行符的文件名调用perl的两个arg
open()
时,会忽略换行符。然而,三个arg版本保留了换行符

为什么行为不同?为什么新线表面上被剥去了

--文件“nl”不存在。成功 $ls-1 nl;触摸nl;ls-1 nl ls:nl:没有这样的文件或目录 nl --尝试打开三个参数“nl\n”→ 埃诺特 斯特拉斯展示了我所期望的行为,FWIW

$ perl -E 'open(F, "<", "nl\n") or die $!' No such file or directory at -e line 1. $ strace -e trace=open perl -E 'open(F, "<", "nl\n") or die $!' 2>&1 | grep nl open("nl\n", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory) $perl-E'打开(F),:

另一个需要注意的重要问题是,正如在shell中一样,文件名前后的任何空白都会被忽略。这很好,因为您不想让它们做不同的事情:


open INFO,“非常简单:因为2-arg
open
的语法接近shell的语法,甚至到了允许管道的程度。

这是3-arg
open
的优点之一。这是3-arg
open
的缺点之一;-)如果将
open
sysopen
分别称为
shell\u open
C\u open
,人们可能会更快地掌握自己的本性。嗯,20年前的人们;再也没有人知道那些恐龙语言了。@tchrist,哦,我真希望
system
能被这样分割(
shell($shell\u cmd)
-vs-
system($prog,@opt\u args)
) $ perl -E 'open(F, "<", "nl\n") or die $!' No such file or directory at -e line 1. $ strace -e trace=open perl -E 'open(F, "<", "nl\n") or die $!' 2>&1 | grep nl open("nl\n", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory) $ perl -E 'open(F, "nl\n") or die $!' $ strace -e trace=open perl -E 'open(F, "nl\n") or die $!' 2>&1 | grep nl open("nl", O_RDONLY|O_LARGEFILE) = 3 $ ls nl $ perl -v
open INFO, "<datafile"
open INFO, "< datafile"
open INFO, "< datafile"