2011-06-01 28 views
3
print "content-type: text/html \n\n"; #The header 
$file = "newtext.txt"; 
if (unlink($file) == 0) { 
    print "File deleted successfully."; 
} else { 
    print "File was not deleted."; 
} 

这是我从tizag中选取的一些代码。我不明白的部分是true的bool值为1,false为0.那么,为什么当我成功删除文件时,我检查它是否返回0?perl中一个非常简单的if/else语句令人困惑

+1

这里的教训:如有疑问,请检查perldoc。 [perldoc perlfunc](http://perldoc.perl.org/perlfunc.html)是我最好的朋友,同时学习,现在仍然如此。 – TLP 2011-06-01 21:59:22

+2

或在命令行'perldoc -f unlink' – 2011-06-01 22:21:06

+0

请注意SO Perl Perl的常规:这是第二次以[tzag](http://www.tizag.com/perlT/)的方式引起人们的注意。在有人可以通过这个网站仔细检查并指出所有错误并提交纠正之前,我已经将这个资源加入了这个资源,并建议你也这样做。 – daxim 2011-06-03 09:28:11

回答

0

好的,没关系我的第一反应。这是来自perldoc for unlink:

删除文件列表。成功时,它会返回成功删除的文件数量。失败时,它返回false并设置$! (errno)

证明没有这样的东西作为标准。还证明谁写这段代码,不幸的是有一个错误。我个人预计0代表成功。如果你看看C系统调用unlink,零意味着成功。完全疯狂,我告诉你。

+2

这允许更可读的版本'if(unlink('file')){print“success”} else {print“failed”}',不是它的C等价物,但Perl不是C,这是一个常见的Perl成语。 – 2011-06-01 22:23:35

+0

任何关心解释downvotes?我相信我的答案与其他人完全一样。 – 2011-06-02 00:31:09

+0

除了整个“C这么做,所以Perl也应该......”你的意思是说。如果脚本语言不是调用C函数的薄单板,那么脚本语言会更好;那么你不会发送像php的mysql_real_escape_string()这样的垃圾泄漏到库中。 – Oesor 2011-06-02 11:29:54

6

这似乎是一个错误..从perldoc perlfunc

删除的文件列表。成功时,它返回 成功删除的文件数。如果失败,则 返回false并设置$! (errno):

如果返回值为0,则删除0个文件。

正确的方式来写这将是:

if (unlink($file)) { print "Success!" } 
else { print "Unlink failed: $!" } 
+1

而更加习惯性的'取消链接$文件或者死“取消$文件链接失败:$!”'。使用autodie为你处理。它随5.10.1一起发货。http://search.cpan.org/perldoc?autodie – Schwern 2011-06-02 01:48:27

1

的片段可以简单地是错误的,引起unlink回报文件的数量删除成功。

2

其实,我认为这是一个错误。来自perldoc for unlink

成功时,它返回成功删除的文件数。失败时,它返回false并设置$! (errno)

可能是自动驾驶仪上的shell编程。