5.3 左值属性:
除非你定义子过程返回一个左值,否则你不能从子过程中返回一个可以修改的标量值:
[oracle@oadb 6]$ cat a6.pl
my $val;
sub canmod :lvalue {
$val;
};
sub nomod {
$val;
};
canmod() = 5;
print $val;
nomod()=5;
[oracle@oadb 6]$ perl a6.pl
Can't modify non-lvalue subroutine call in scalar assignment at a6.pl line 11, near "5;"
Execution of a6.pl aborted due to compilation errors.
不能修改 非左值函数请求在标量赋值
canmod() = 5; # 给 $val 赋值为 5
nomod() = 5; # 错误
子过程可以用一个&开头命名,不过调用子过程的时候这个趣味字符是可选的。
子过程通常不认为是左值得,
不过最近版本的Perl允许你从一个子过程返回一个左值赋予该子过程
这样看起来可能像给你在给那个子过程赋值: