关于一个局部变量和全局变量的问题!崩溃。。。

关于一个局部变量和全局变量的问题!崩溃。。。

写了一个程序和子程序,部分如下:
主程中引用如下:

&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则正常调用了我定义的局部变量(我在主程中从未重复使用过这些变量名)。

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

传说中的符号引用?

任何程序,建议加上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};
好,谢谢,我先试试。。。。

看来用${$type}的这种形式果然不行,不过不知道为什么?按理说如果$type='traffic'的话,${$type}应该和$traffic是等价的呀?不太明白为什么程序引用${$type}时只引用同名的全局变量,而不引用局部变量?!

谢谢,准备改用散列了,不过还是想知道以上的原因,哪位知道不妨告诉一下,谢谢!
use strict的时候,是不能用符号引用的
符号引用可以引用全局变量,对于my的,我就不知道了,因为我向来use strict; 不用符号引用……