while modifier中不能声明变量
时间:2010-10-22
来源:互联网
刚回贴子的时候遇到了个错误,很出乎意料。测试代码如下
复制代码
复制代码
以前一直以为是一样的,可是第二个却是错误的。报 Global symbol $k $v require explicit package name
显然perl认为我没有声明这两个变量。我知道像 my $a = 32 if xxx; 这样的语句是行为是末定义的,文档上也说
modifier左侧不应该出现 my 变量的声明。可是这里的 while 的使用怎么着也不会产生误解啊。
请问各位在哪个文档里面看到这个的说明了吗?
还是说这属于个bug?
还是说这是 strict 内部实现机制的问题,必须在前面[程序文本的前面]声明变量?
- use strict;
- use warnings;
-
- my %h = 1..10;
- while (my($k,$v) = each %h) {
- print "$k\t$v\n";
- }
- use strict;
- use warnings;
-
- my %h = 1..10;
- print "$k\t$v\n" while my($k,$v) = each %h;
显然perl认为我没有声明这两个变量。我知道像 my $a = 32 if xxx; 这样的语句是行为是末定义的,文档上也说
modifier左侧不应该出现 my 变量的声明。可是这里的 while 的使用怎么着也不会产生误解啊。
请问各位在哪个文档里面看到这个的说明了吗?
还是说这属于个bug?
还是说这是 strict 内部实现机制的问题,必须在前面[程序文本的前面]声明变量?
作者: zhlong8 发布时间: 2010-10-22
本帖最后由 zhlong8 于 2010-10-22 11:55 编辑
想到了解释,不知道对不对。带modifier的语句也只是简单的语句,不形成BLOCK,所以也就不存在局部变量,左侧和右侧以及整个语句所处的scope其实是一样的。从这方面上讲它和 while () {} 是完全不一样的。
测试代码和其它modifier的测试说明声明的变量是在该语句所处的作用域内的,在Modifier右侧声明变量可以,但是要在下一条语句才可见。但是还是很郁闷,左侧见不到
想到了解释,不知道对不对。带modifier的语句也只是简单的语句,不形成BLOCK,所以也就不存在局部变量,左侧和右侧以及整个语句所处的scope其实是一样的。从这方面上讲它和 while () {} 是完全不一样的。
测试代码和其它modifier的测试说明声明的变量是在该语句所处的作用域内的,在Modifier右侧声明变量可以,但是要在下一条语句才可见。但是还是很郁闷,左侧见不到

作者: zhlong8 发布时间: 2010-10-22
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28