2011-06-01 68 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編程。