好的,所以很容易创建一个数组的引用...
my @a;
my $b=\@a;
#can now reference the same list of scalars from either @$b or @a但我如何才能反其道而行之?例如:
my $a=[1..4];
my @b;
#some magic happens here and now @b is an alias for @$a
@b=(6..10);
print "@$a\n"; #should print "6 7 8 9 10"我假设这将通过typeglobs实现,但我就是想不到它们。想法?
同样,对哈希和数组做同样的事情也很好。
编辑:这似乎是可行的,但它有点笨拙,因为它只是将无名数组元素复制到“别名”,然后将自己重新指向数组:
my @b=@$a;
$a=\@b;有更好的主意吗?
发布于 2012-12-28 22:59:42
三种方式:
5.22添加了一个实验功能,它完全可以做你想要的事情。
使用实验性的qw(重混叠);\my @B = $A;
5.26添加了第二个实验功能,允许以下功能:
使用实验性的qw(重混叠declared_refs );my \@B = $A;
请注意,作为实验性要素,这些要素随时可能发生更改和移除。
Perl将其符号表条目数据结构称为"type glob",或简称为"glob“。可以将此数据结构中的条目设置为引用,以命名该引用。
local our @B;*B = $A;#设置"B",@B的数组插槽。
请注意,我们必须使用包变量,因此变量是全局visible.
别名my @B = @$A;
发布于 2012-12-28 23:32:41
perl程序中的所有变量都存储在名称空间中。有两种类型的名称空间:
Typeglobs用于定义记录(变量、数组等)。符号表,但不是词法作用域。所以,当你使用这部分代码时:
my @b;
*b = $a;你将会得到它:
Name "main::b" used only once:这告诉我们,我们没有在符号表中定义记录main::b,但是我们可以使用修饰符"our“来定义它。因此,当你这样写的时候:
our @b;
*b = $a;我们可以得到一个有用的结果,因为*b存储在符号表中,我们可以使用运算符* typeglob。
发布于 2012-12-28 22:43:34
我想我明白了..。
my $a=[1..4];
our @b;
*b=$a;
print "@b\n";
@b=(6..10);
print "@$a\n";打印:
1 2 3 4
6 7 8 9 10“我们的”对我来说还有点神秘...我想我还得读点书..。
https://stackoverflow.com/questions/14070342
复制相似问题