&func 调用与 func 调用的差别
时间:2010-09-09 来源:黑色阳光_cu
一般情况下,函数调用时,@_会先被局部化,只有一种情况下不会,就是用&方式调用又没有提供参数列表时:
而在函数里,假定@_被重新赋值的话:
$_[1]相当于常量2的别名,修改$_[1]等于修改常量2,
$_[2]相当于常量3的别名,修改$_[2]等于修改常量3,
那 @_ = (4, 5, 6)
相当于 ($_[0], $_[1], $_[2]) = (4, 5, 6) ?
等于修改常量的值?
不,当@_被重新赋值时,@_会先被清空。所以,@_ = (4, 5, 6) 不会引起问题,不会修改实参的值。而 ($_[0], $_[1], $_[2]) = (4, 5, 6) 可以修改实参的值,假如是实参是常量的话,引起语法错。
- sub func
- {
- warn \@_;
- }
-
- @_ = (1, 2, 3);
- warn \@_;
- print "\n";
-
- func();
- func;
- &func();
- &func;
而在函数里,假定@_被重新赋值的话:
- sub func
- {
- warn \$_[0];
- @_ = (4, 5, 6);
- #($_[0], $_[1], $_[2]) = (4, 5, 6);
- warn \$_[0];
- }
-
- func(1, 2, 3);
$_[1]相当于常量2的别名,修改$_[1]等于修改常量2,
$_[2]相当于常量3的别名,修改$_[2]等于修改常量3,
那 @_ = (4, 5, 6)
相当于 ($_[0], $_[1], $_[2]) = (4, 5, 6) ?
等于修改常量的值?
不,当@_被重新赋值时,@_会先被清空。所以,@_ = (4, 5, 6) 不会引起问题,不会修改实参的值。而 ($_[0], $_[1], $_[2]) = (4, 5, 6) 可以修改实参的值,假如是实参是常量的话,引起语法错。
相关阅读 更多 +
排行榜 更多 +