以下代碼顯示的輸出比預期的不同。 '我'應該是答案。- - 在perl中不能正常工作
代碼:
$var = 'i';
$var++;
print $var;
$var--;
print " * ",$var;
結果:
j ***** -1
任何人都可以請解釋的行爲?我知道我錯過了一件非常愚蠢的事情。
謝謝
以下代碼顯示的輸出比預期的不同。 '我'應該是答案。- - 在perl中不能正常工作
代碼:
$var = 'i';
$var++;
print $var;
$var--;
print " * ",$var;
結果:
j ***** -1
任何人都可以請解釋的行爲?我知道我錯過了一件非常愚蠢的事情。
謝謝
在Perl中沒有類型的字符。 '我'和「我」是一樣的字符串。問題是爲什麼++會增加char的值。這個問題已經在這裏討論了:Increment (++) and decrement (--) strings in Perl
自動增量運算符++
是「神奇的」,因爲它也可以遞增非數字字符串。所以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)。
自動遞減運算符並不神奇。
''我'應該是ans.'這是什麼意思? – TLP