免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3064 | 回复: 5
打印 上一主题 下一主题

关于一个局部变量和全局变量的问题!崩溃。。。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-01-11 09:07 |只看该作者 |倒序浏览
写了一个程序和子程序,部分如下:
主程中引用如下:

&MRTG_Config($max_rate,$link_desc,$ip_address,$if_index,$community,'traffic');

&MRTG_Config($max_rate,$link_desc,$ip_address,$if_index,$community,'uncast');

&MRTG_Config($max_rate,$link_desc,$ip_address,$if_index,$community,'multicast');

&MRTG_Config($max_rate,$link_desc,$ip_address,$if_index,$community,'broadcast');

子程序如下:
sub MRTG_Config {
    my ($max_rate,$link_desc,$ip_address,$if_index,$community,$type)=@_;
    my $traffic='bit';
    my $uncast=$multicast=$broadcast='packets';
    print "type is $type,traffic is $traffic,result is ${$type}\n";
}

结果如下:
type is traffic,traffic is bit,result is
type is uncast,traffic is bit,result is
type is multicast,traffic is bit,result is packets
type is broadcast,traffic is bit,result is packets


问题:
为什么第一、二行结果不能正常打印$traffic和$uncast???  我把子程序中的$traffic及$uncast等的定义改成全局变量(去掉前面的my)结果就正常了,我的感觉是子程序在打印时,对于$traffic及$uncast均调用的全局变量,而$multicast及$broadcast则正常调用了我定义的局部变量(我在主程中从未重复使用过这些变量名)。

请高手帮忙解答一下,谢谢。

论坛徽章:
0
2 [报告]
发表于 2008-01-11 09:37 |只看该作者
DDDDDDDDDDDDDDDDDDDDDDDDDDDD

论坛徽章:
0
3 [报告]
发表于 2008-01-11 09:50 |只看该作者

传说中的符号引用?

任何程序,建议加上use strict; use warnings;
在不必要的情况下不使用符号引用

my $uncast=$multicast=$broadcast='packets';

上面这句话就是有问题的,表示,你申明了$uncast为my变量,而其他2个仍然是全局变量,所以出现不同
my申明多个应该是 my($aa,$bb,$cc,$dd)=(0,0,0,0);这样子的

为何不用hash呢?my %tmp; print $tmp{$type};

论坛徽章:
0
4 [报告]
发表于 2008-01-11 14:13 |只看该作者
好,谢谢,我先试试。。。。

[ 本帖最后由 hotren 于 2008-1-11 14:17 编辑 ]

论坛徽章:
0
5 [报告]
发表于 2008-01-11 14:25 |只看该作者
看来用${$type}的这种形式果然不行,不过不知道为什么?按理说如果$type='traffic'的话,${$type}应该和$traffic是等价的呀?不太明白为什么程序引用${$type}时只引用同名的全局变量,而不引用局部变量?!

谢谢,准备改用散列了,不过还是想知道以上的原因,哪位知道不妨告诉一下,谢谢!

论坛徽章:
0
6 [报告]
发表于 2008-01-11 14:56 |只看该作者
use strict的时候,是不能用符号引用的
符号引用可以引用全局变量,对于my的,我就不知道了,因为我向来use strict; 不用符号引用……
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP