2010-07-09 72 views
3

我調試一個Perl腳本,它看起來像這樣(簡化):perl中的語言環境設置是否全局?

#!/usr/bin/perl  
use strict; 
use warnings; 

use Evil::Module; 

printf "%.3f\n", 0.1; 

此腳本輸出0,100(注意,而不是.)。如果我註釋掉use Evil::Module聲明,則輸出將爲0.100

我相信這與模塊中的區域設置有關。但locale是一個詞彙編譯指示(根據手冊頁),並不在腳本中使用。這裏發生了什麼事?

回答

5

use locale附註是詞法,但如果Evil :: Module模塊使用POSIX::setlocale,則語言環境更改是全局性的。

請參閱perldoc perllocale瞭解更多信息。

+0

@Hynek - 你要麼真的討厭JavaScript,不要做任何web開發,或者這是一個幽默的嘗試,或者你需要學會區分語言的一個可能的壞的特徵 - 以及由使用該語言的特定開發人員 - 以及語言本身。 – DVK 2010-07-09 19:43:15

+0

@DVK:你找到了。我不使用JavaScript進行網頁開發。無論如何,我正在開發200k SLOC perl項目,我很清楚我在說什麼。我已經愛上了perl七年以及perl幾千個SLOC,但是我感覺到了。它是$ _,$ @,$ !, $ ?, ...什麼咬你與DESTROY或信號處理程序或其他任何東西。這是一種語言本身的不良特徵。 – 2010-07-09 23:26:10

+1

@Hynek:是的,但不管你有多不喜歡Perl,POSIX語言環境的東西真的是邪惡的。這是相當令人震驚的錯誤觀點,並且會導致成千上萬的應用程序出現問題。 – 2010-07-09 23:51:12