访问名称的perl数组存储在字符串中

时间:2017-09-27 10:41:50

标签: perl

如果我有一个存储在变量中的数组的名称,即

$var = "@array"

我有什么方法可以访问

$array[0] 

仅来自此信息?

提前致谢。

2 个答案:

答案 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";

但这是一个坏主意 - 它会绊倒一堆东西,尤其是'我的数组中是否包含元素中的空格' - 通过类似JSONYAML之类的序列化,没有很好的解决方案。

重新阅读您的问题后,您似乎正在尝试进行符号引用,而非我的想法。

这是一个糟糕的主意,你不应该这样做。

请参阅: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)。