2013-05-30 30 views
0

以下代碼顯示的輸出比預期的不同。 '我'應該是答案。- - 在perl中不能正常工作

代碼:

$var = 'i'; 
$var++; 
print $var; 
$var--; 
print " * ",$var; 

結果:

j ***** -1 

任何人都可以請解釋的行爲?我知道我錯過了一件非常愚蠢的事情。

謝謝

+0

''我'應該是ans.'這是什麼意思? – TLP

回答

5

在Perl中沒有類型的字符。 '我'和「我」是一樣的字符串。問題是爲什麼++會增加char的值。這個問題已經在這裏討論了:Increment (++) and decrement (--) strings in Perl

+3

TL; DR:增量是神奇的,適用於字符串;減量不是,並且始終將標量視爲一個數字。 – amon

+0

@TLP(tl; dr是指* linked *答案,而不是* this *答案,它不包含我總結的信息) – amon

7

自動增量運算符++是「神奇的」,因爲它也可以遞增非數字字符串。所以i變成j。自動遞減運算符--沒有這個「魔術」功能。因此,字符串j被轉換爲數字,該數字將爲0,然後遞減爲-1

這是記錄在perldoc perlop

自動遞增經營者有一點點額外的內置魔法吧。如果 您增加了一個數字變量,或者在數字上下文中曾經使用過 ,您會得到一個正常增量。但是,如果 變量自設置以來僅在字符串上下文中使用,並且 的值不是空字符串,並且與 /^ [a-zA-Z] [0-9] \ Z /,增量完成爲一個字符串,保存 其範圍內的每個字符,帶進位:

print ++($foo = "99"); # prints "100" 
print ++($foo = "a0"); # prints "a1" 
print ++($foo = "Az"); # prints "Ba" 
print ++($foo = "zz"); # prints "aaa" 

爲undef始終被視爲數字,特別是被改變爲0 遞增之前(以便undef值的後增量將返回0而不是undef)。

自動遞減運算符並不神奇。

相關問題