- 論壇徽章:
- 0
|
多謝,剛剛注意到了,呵呵。
引入了我的另外兩個新問題
1)如何判斷智能匹配語法上下文 是數(shù)字上下文還是字符串上下文呢?
我個人覺得最容易理解case 3
####################
my $var = "12a" + 0; #var是數(shù)字變量12
if ( $var ~~ '12.0' ) { #這個時候智能匹配選擇數(shù)字上下文 12 == 12.0,轉(zhuǎn)換‘12.0’到數(shù)字12
case 1
####################
my $var = "12"; #var是字符串變量
$var + 0; #var轉(zhuǎn)換中字符串成了數(shù)字12, var有了兩種屬性(我簡稱它為屬性),數(shù)字12和字符串‘12’
if ( $var ~~ '12.0' ) { #這個時候智能匹配選擇數(shù)字上下文 12 == 12,??奇怪了為什么選擇數(shù)字上下文而不是字符串上下文 ‘12’ eq ‘12.0’呢??
case 2
####################
my $var = "12a"; #var是字符串變量
$var + 0; #var轉(zhuǎn)換中字符串成了數(shù)字12,var有了兩種屬性,數(shù)字12和字符串‘12a’
if ( $var ~~ '12.0' ) { #這個時候智能匹配選擇字符串上下文 ‘12a’ eq ‘12.0’, ??奇怪為什么不選擇數(shù)字上下文了呢??
2)另外我還有一個困惑的問題就是版主提出的dualvar,這個變量到底存儲的是數(shù)字變量還是字符串變量,還是都存儲然后根據(jù)上下文情景再去選擇?
我寫了一個測試代碼如下:
#######################
use Devel: eek qw(Dump);
use Scalar::Util qw(dualvar);
use strict;
my $var1 = 34;
my $var2 = "dbc";
my $var3 = dualvar 34,'dbc';
my $var4 = "34dbc";
Dump($var1);
Dump($var2);
Dump($var3);
$var4 + 0;
Dump($var4);
#######################
結(jié)果為
SV = IV(0x182afd0) at 0x182afd4
REFCNT = 1
FLAGS = (PADMY,IOK,pIOK)
IV = 34 <=== 100%數(shù)字變量
SV = PV(0x287044) at 0x182b084
REFCNT = 1
FLAGS = (PADMY,POK,pPOK)
PV = 0x28f8cc "dbc"\0 <====100%字符串變量
CUR = 3
LEN = 4
SV = PVNV(0x288a6c) at 0x182b004
REFCNT = 1
FLAGS = (PADMY,IOK,POK,pIOK,pPOK)
IV = 34 ??50%數(shù)字變量??
NV = 0
PV = 0x186b05c "dbc"\0 ??50%字符串變量??
CUR = 3
LEN = 4
Argument "34dbc" isn't numeric in addition (+) at test.pl line 12.
SV = PVNV(0x288a54) at 0x182b034
REFCNT = 1
FLAGS = (PADMY,POK,pIOK,pNOK,pPOK)
IV = 34
NV = 34 <===這里和變量三又不太一樣
PV = 0x1824b8c "34dbc"\0
CUR = 5
LEN = 8
######################
注意到其中的PV,IV,NV字段有些不同,可以幫我理解嗎?謝謝 |
|