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

usestrict;my$array_name=abc;my${$array_name}[0]=bcd;报错:Can'tusestring("abc")asanARRAY... 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,会有什么风险?
展开
 我来答
百度网友c9e795dda
2014-12-08 · TA获得超过5167个赞
知道大有可为答主
回答量:1128
采纳率:0%
帮助的人:1156万
展开全部
你这样的命名本来就是错的... 去掉 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" ;
追问
对于第一个(1..10)的举例我还是不怎么理解,和我说的赋值的关系。我是想把"abc"值赋给$array_name,然后${$array_name}[0] = “bcd”相当于$abc[0]="bcd",既@abc的第一个元素是"bcd"。我用的是5.14版本啊,这样并不会直接报错。
追答
问题出在
my @array = ( 1..10 ); # 你已定义了 @array
my $array[1] = 10;; # 这里你就不要用 my

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

$array[1] 是一个地址段(引用) "refs" , 你不能对一个引用作 my 的宣告
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式