除非你定義子過程返回乙個 左值,否則你你不能從子過程中返回乙個可以修改的標量值:
[root@wx03 test]# cat t20.pl
my $val;
sub canmod:lvalue
sub nomod
canmod() = 5; # 給 $val 賦值為 5
#nomod() = 5; # 錯誤
print "\$val is $val\n";
print "1111111111111\n";
print &canmod;
print "\n";
[root@wx03 test]# perl t20.pl
$val is 5
1111111111111
5修改子程式的返回值
如果你正傳遞引數到乙個有 左值 屬性的子過程,你一般會使用圓括弧來防止歧義:
[root@wx03 test]# cat t20.pl
my $val;
sub canmod:lvalue
sub nomod
canmod($x) = 100; # 給 $val 賦值為 5
#nomod() = 5; # 錯誤
print "\$val is $val\n";
[root@wx03 test]# perl t20.pl
$val is 100
具有左值屬性的方法呼叫在 不傳送任何引數時也能省
略圓括弧:
$obj->canmod = 5;
12.7.6 新技巧
package critter;
sub new ; # 覆蓋預設。
bless $self, $class;
}su
左值 右值 左值引用 右值引用
2015 06 01 15 07 404人閱讀收藏 舉報 c 11 5 一 c 中的左值和右值 誤區 左值位於等號左邊,右值位於等號右邊。c 11中的定義 左值表示式表示的是乙個物件的身份 在記憶體中的位置 而右值表示式表示的是物件的值 內容 左值和右值都是針對表示式而言的,左值是持久的,右值是短暫...
左值 左值引用 右值 右值引用
1 左值和右值的概念 左值是可以放在賦值號左邊可以被賦值的值 左值必須要在記憶體中有實體 右值當在賦值號右邊取出值賦給其他變數的值 右值可以在記憶體也可以在cpu暫存器。乙個物件被用作右值時,使用的是它的內容 值 被當作左值時,使用的是它的位址。2 引用 引用是c 語法做的優化,引用的本質還是靠指標...
左值 左值引用 右值 右值引用
1 左值和右值的概念 左值是可以放在賦值號左邊可以被賦值的值 左值必須要在記憶體中有實體 右值當在賦值號右邊取出值賦給其他變數的值 右值可以在記憶體也可以在cpu暫存器。乙個物件被用作右值時,使用的是它的內容 值 被當作左值時,使用的是它的位址。2 引用 引用是c 語法做的優化,引用的本質還是靠指標...