子过程左值属性
2016-05-21 15:36
176 查看
<pre name="code" class="html">除非你定义子过程返回一个 左值,否则你你不能从子过程中返回一个可以修改的标量值: [root@wx03 test]# cat t20.pl my $val; sub canmod:lvalue { return $val; } sub nomod { $val; } 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 { $val =shift; return $val; } sub nomod { $val; } 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 { my $class = shift; my $self = { pups => 0, @_ }; # 覆盖缺省。 bless $self, $class; } sub pups : lvalue { # 我们稍后给pups()赋值 my $self = shift; $self->{pups}; } package main; $varmint = Critter->new(pups => 4); $varmint->pups *= 2; # 赋给 $varmint->pups! 这里把8赋值给$varmint->pups $varmint->pups =~ s/(.)/$1$1/; # 现场修改 $varmint->pups! print $varmint->pups; # 现在我们有88个pups。 [root@wx03 test]# cat t22.pl unshift(@INC,"/root/test"); use loop; $ua=loop->new(); $str=$ua->test_fun1; print "\$str is $str\n"; [root@wx03 test]# perl t22.pl ok $str is 1 $str 是函数的返回值,这里返回1
相关文章推荐
- iOS - 修改UITextField的placeholder颜色
- Quartz2D 编程指南(二)变换、图案、阴影
- Adroid我还是个菜鸟——导入jar包
- 第4课:Spark Streaming的Exactly-One的事务处理和不重复输出彻底掌握
- svn创建搭建教程
- Django中连接Mysql报错 No module named MySQLdb
- C++迷宫问题(BFS)
- Activity跳转Flag详解
- [Machine Learning & Algorithm]CAML机器学习系列2:深入浅出ML之Entropy-Based家族
- android 动画 ——alpha、scale、translate、rotate、set的xml属性及用法
- 互联网金融爬虫怎么写-第一课 p2p网贷爬虫(XPath入门)
- JavaScript插入节点小结
- springMvc
- LeetCode|Surrounded Regions
- 利用Fiddler进行模拟限速测试
- HDU 3988 Harry Potter and the Hide Story(数论)(素数筛法)
- 对数组的每个元素仍是数组的遍历方法,c#,foreach,for
- Couldn't load cocos2dcpp from loader dalvik.system.PathClassLoader
- 广度优先搜索(breadth_first search)
- 漂亮的servlet-acquire cookies