如果我有一个存储在变量中的数组的名称,即
$var = "@array"
我有什么方法可以访问
$array[0]
仅来自此信息?
提前致谢。
答案 0 :(得分:2)
如果您将数组分配给类似的var,则会使用$"
自动加入它。
因此,您可以根据$"
拆分并反转它。
#!/usr/bin/env perl
use strict;
use warnings;
my @array = qw ( fish carrot banana );
my $var = "@array";
print +(split (/\Q$"\E/, $var))[0],"\n";
但这是一个坏主意 - 它会绊倒一堆东西,尤其是'我的数组中是否包含元素中的空格' - 通过类似JSON
或YAML
之类的序列化,没有很好的解决方案。
重新阅读您的问题后,您似乎正在尝试进行符号引用,而非我的想法。
这是一个糟糕的主意,你不应该这样做。
请参阅:Why it's a bad idea to use a variable as a variable name
缺点是 - 这是一种非常糟糕的做法,在某些情况下可能在技术上是可行的,但极少数适用于现实世界的编码。
问题代码的真正根源是:它很脆弱。当你这样做的时候,你就会把事情搞得一团糟。如果其中两个不同的东西碰巧有相同的名字,那么它们就会发生碰撞,你会得到错误的答案。所以你最终得到了一长串的名字,你必须小心不要重复使用,如果你搞砸了,你会得到一个非常奇怪的错误。这正是命名空间被发明要解决的问题,而这正是哈希的意思:便携式命名空间。
只需使用哈希,并使用哈希键作为符号引用。
答案 1 :(得分:-2)
#!/usr/bin/env perl
use PadWalker qw/peek_my/;
my @array = (1, 2, 3);
my $var = '@array';
my $lexical = peek_my(0);
print $lexical->{$var}->[0];
这里$ lexical-> {$ var}引用你的@array。
peek_my的论点是范围级别(详见PadWalker)。