为了账号安全,请及时绑定邮箱和手机立即绑定

perl为什么数组名不能是变量

perl为什么数组名不能是变量

胡说叔叔 2019-04-12 07:06:51
use strict;my $array_name = abc;my ${$array_name}[0] = bcd;报错:Can't use string ("abc") as an ARRAY ref while "strict refs"in use at read.pl line xx.去掉strict后即可正常运行。想问问为什么use strict就不能用变量作为数组名,如果去掉strict,会有什么风险?
查看完整描述

2 回答

?
慕神8447489

TA贡献1780条经验 获得超1个赞

你这样的命名本来就是错的... 去掉 strict, 你就不会发现这样的命名是不对的,

往後的处理也将是错的. ( 如果结果还是对的, 那只是你走运而已 )

想像一下
my @array = ( 1..10 );
my $array[1] = 10;
@array = ();
print @array;

你还能理解 $array[1] 是甚麼吗 ?
而如果你用的 perl 是 5.14 或之後, 你这样的宣告方法应该是直接报错, 不管你有没有 use strict;

另外值得一提的就是

my $array_name = abc;

其实就是
my $array_name = abc(); # 或者
my $array_name= &abc(); # 的意思,

而你可能想这是
my $array_name = "abc" ;

查看完整回答
反对 回复 2019-04-13
?
FFIVE

TA贡献1797条经验 获得超6个赞

问题出在
my @array = ( 1..10 ); # 你已定义了 @array
my $array[1] = 10;; # 这里你就不要用 my

@array 是一个变量名称 "symbol", 你可以 my

$array[1] 是一个地址段(引用) "refs" , 你不能对一个引用作 my 的宣告

查看完整回答
反对 回复 2019-04-13
  • 2 回答
  • 0 关注
  • 874 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信