2012-08-28 60 views
1

我有一個相當基本的問題。perl通過駱駝書中的代碼示例創建字符

我正在閱讀駱駝書第6版。第2章中的標量數據一個例子的代碼是這樣的:

$alef = chr (0x05d0); 

我試圖打印使用以下但它印刷空白行。

#! /usr/bin/perl 
use warnings; 
use utf8; 
binmode(STDOUT, ":utf8"); 
#use open qw/:std :utf8/; 

$alef = chr(0x05D0); 
print $alef; 

$alpha = chr(hex('03B1')); 
print $alpha; 

$omega = chr(0x03C9); 
print $omega; 

然後我檢查了文檔的UTF-8,而沒有一個05D0,有005D,這會給我一個右方括號「]」。

我的問題是這樣的:有沒有我錯過了導致空行的東西,或者它只是發佈者/作者的一部分?

和阿爾法和歐米茄的作品發現,如果它不是阿列夫。 :)

感謝 戴維

+3

當我運行此代碼(在Linux和OS X上)時,我得到了希伯來語alef(א),alpha(α)和omega(ω)。但是,如果在每個打印語句之後放置'\ n',它的效果會更好。也許這與你的平臺有關。 – mttrb

+0

我在Windows 7上運行cygwin,也許你是對的 –

+3

當談到Unicode的東西時,Windows控制檯上的Perl被認爲是非常麻煩的(不幸的是它很難得到正確的結果)。 Alef的05D0是正確的。你應該寫一個文件而不是控制檯來做任何與unicode相關的練習。 – hobbs

回答

1

這有什麼好做UTF-8。這些是Unicode個字符。

U+05D0:א

U+03B1:α

U+03C9:ω

如果您有空行,您的字體可能沒有這些字符的字形。

+0

根據這本書,如果我想使用unicode,我必須包含utf-8編譯指示,輸出也必須指定爲utf-8。 –

+0

另外,我認爲hobbs可能有一個問題,我只是在我的工作機器上嘗試了相同的代碼,alef被打印爲x。所以這可能就是這個特殊的cygwin不知道alef。 –

+0

@ D.Zou,'use utf8;'告訴Perl源代碼使用UTF-8編碼。由於它只包含ASCII字符,'use utf8;'在該程序中完全沒有任何作用。 – ikegami