2011-02-26 98 views
2
#!/usr/bin/env perl 
use warnings; 
use 5.012; 

say "no semicolon" 

say "World"; 
say "World"; 
say "World"; 
say "World"; 
say "World"; 

# syntax error at ./perl1.pl line 7, near "say" 
# Execution of ./perl1.pl aborted due to compilation errors. 

關於編譯時錯誤的問題

#!/usr/bin/env perl 
use warnings; 
use 5.012; 

my $character = "\x{ffff}"; 

say "Hello"; 
say "Hello"; 
say "Hello"; 
say "Hello"; 
say "Hello"; 

# Unicode non-character 0xffff is illegal for interchange at ./perl1.pl line 5. 
# Hello 
# Hello 
# Hello 
# Hello 
# Hello 

爲什麼第二個腳本不告訴我,有一個編譯時錯誤?

當我不能 - 用「警告FATAL => qw(all);」 - 用Try :: Tiny或block-eval捕獲錯誤,我可以得出結論,它是編譯時錯誤嗎?

#!/usr/bin/env perl 
use warnings FATAL => qw(all); 
use 5.012; 
use Try::Tiny; 

my $character; 

try { 
    $character = "\x{ffff}"; 
} catch { 
    die "---------- caught error ----------\n"; 
}; 

say "something"; 

# Unicode non-character 0xffff is illegal for interchange at ./perl1.pl line 9. 
+0

該程序已執行,因此程序中可能沒有編譯時錯誤...如果出現編譯時錯誤,程序將無法運行。 – tadmc 2011-02-27 01:02:31

+0

如果我會問:「......,我可以得出結論嗎,它不是運行時錯誤,也不是運行時警告」,那可以嗎? – 2011-02-27 07:11:29

回答

7

Unicode non-character 0xffff is illegal for interchange at ...是編譯時警告。

當你use warnings FATAL => all,你要求Perl將所有警告視爲錯誤,因此它成爲編譯時錯誤。