为什么Perl';两个arg open似乎在剥离新线?
当我使用包含尾随换行符的文件名调用perl的两个arg为什么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
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-argopen
的语法接近shell的语法,甚至到了允许管道的程度。这是3-argopen
的优点之一。这是3-argopen
的缺点之一;-)如果将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"