作者 主題: PERL 的型別錯誤範例  (閱讀 11276 次)

0 會員 與 1 訪客 正在閱讀本文。

劍客

  • 活潑的大學生
  • ***
  • 文章數: 238
    • 檢視個人資料
    • http://kalug.ks.edu.tw
PERL 的型別錯誤範例
« 於: 2001-11-27 17:41 »
#!/usr/bin/perl
$A=0500;
print "A is ".$A."n";
print "int A is ".int($A)."n";
print "n";

$B='0500';
print "B is ".$B."n";
print "int B is ".int($B)."n";

劍客

  • 活潑的大學生
  • ***
  • 文章數: 238
    • 檢視個人資料
    • http://kalug.ks.edu.tw
PERL 的型別錯誤範例
« 回覆 #1 於: 2001-11-27 17:42 »
忘記貼執行結果了!

A is 320
int A is 320

B is 0500
int B is 500

梁楓

  • 俺是博士!
  • *****
  • 文章數: 6220
    • 檢視個人資料
PERL 的型別錯誤範例
« 回覆 #2 於: 2001-11-28 16:01 »
唔,小小的疑問

這個範列本身有錯誤的地方嗎? :razz: 看不太出來...

A的指定方式是以數字去做指定,所以系統內部會以他的內容去判斷
全部都是數字(含小數點),那就是數字型態,有一個數字以外(不含小數點)即視為字串

B指定的方式由於是以""做指定,所以其直接以字串做為其資料類型

錯的地方,在那裡丫? f^^
小弟愚昧,沒看出來,可以教一下嗎?

劍客

  • 活潑的大學生
  • ***
  • 文章數: 238
    • 檢視個人資料
    • http://kalug.ks.edu.tw
PERL 的型別錯誤範例
« 回覆 #3 於: 2001-11-28 18:16 »
其實程式本身沒錯,錯的是我們對結果的預期。在這範例中,如果你光看程式,你認為會印出 500 還是 320?

為什麼我們設給 A 的值是 0500 ,照你所說︰"以數字去做指定,所以系統內部會以他的內容去判斷全部都是數字(含小數點),那就是數字型態",那 A 印出來應該是 500 啊!

但是你看看印出的結果卻變成 320 ,為什麼呢?

留給大家討論一下!

梁楓

  • 俺是博士!
  • *****
  • 文章數: 6220
    • 檢視個人資料
PERL 的型別錯誤範例
« 回覆 #4 於: 2001-11-28 20:10 »
我的看法是這樣的...

A之所以是500,而不是0500
是因為他是直接以數值,而且沒有用""去做框選

而沒有用 "" 框選的

其實重點就是在於 "" 或是''上面
有跟沒有真的是差蠻多的...

劍客

  • 活潑的大學生
  • ***
  • 文章數: 238
    • 檢視個人資料
    • http://kalug.ks.edu.tw
PERL 的型別錯誤範例
« 回覆 #5 於: 2001-11-30 17:46 »
A 不是 500 啦!你實際跑一遍就知道了!

梁楓

  • 俺是博士!
  • *****
  • 文章數: 6220
    • 檢視個人資料
PERL 的型別錯誤範例
« 回覆 #6 於: 2001-11-30 18:38 »
唔。不好意思....寫太順了,哈
把主題看錯了...晚上就跑一次

...

  • 酷學園旁聽生
  • 俺是博士!
  • *****
  • 文章數: 5607
    • 檢視個人資料
PERL 的型別錯誤範例
« 回覆 #7 於: 2001-12-02 22:42 »
0 開頭的是八進位
所以 0500 是 320
^^

劍客

  • 活潑的大學生
  • ***
  • 文章數: 238
    • 檢視個人資料
    • http://kalug.ks.edu.tw
PERL 的型別錯誤範例
« 回覆 #8 於: 2001-12-07 13:05 »
#!/usr/bin/perl
$B=0x500;
print "B is ".$B."n";
print "int B is ".int($B)."n";
print "n";

$B='0x500';
print "B is ".$B."n";
print "int B is ".int($B)."n";
print "n";

print "---------------------------------------n";
$B="0x500";
print "B is ".$B."n";
print "int B is ".int($B)."n";
print "---------------------------------------n";
$C="a";
print "C is ".$C."n";
print "int C is ".int($C)."n";
print "---------------------------------------n";

劍客

  • 活潑的大學生
  • ***
  • 文章數: 238
    • 檢視個人資料
    • http://kalug.ks.edu.tw
PERL 的型別錯誤範例
« 回覆 #9 於: 2001-12-07 13:08 »
B is 1280
int B is 1280

B is 0x500
int B is 1

---------------------------------------
B is 0x500
int B is 1
---------------------------------------
C is a
int C is 0
---------------------------------------

第三個 B 如果是字串,為什麼取整數的結果會跟 C 的結果不同?