如何将子例程调用的结果分配给Perl中的数组引用?

时间:2009-10-07 11:18:15

标签: perl arrays reference

是否可以将数组变量分配给数组引用而不是标量变量?

而不是:

($a, $b) = some_sub(\@d, \@e);

我想要这样的事情:

(@x, @y) = some_sub(\@x1, \@y1);

如果是这样,我怎样才能取消引用它。就像前者@$xxxx为我们做的那样。

感谢。

2 个答案:

答案 0 :(得分:7)

你可以分两步完成(实际上是3行):

my ($x_ref, $y_ref) = some_sub(\@x1, \@y1);
my @x = @{ $x_ref };
my @y = @{ $y_ref };

问题是 - 简单地抛弃直接数组并开始在任何地方使用引用都不简单吗?

答案 1 :(得分:4)

引用是一个标量(根据定义),即使它所指的不是。所以我不太清楚你的意思是“将数组变量赋给数组引用而不是标量变量”。您可以push将数组引用到正常数组中作为成员,然后直接取消引用它们。您还可以从子例程返回引用。

您可以取消引用分配中子例程的返回值。我想知道这是不是你想要做的事情?

my @array = @{ some_sub() };

请注意,正如Axeman在下面评论这不是一个好主意或特别必要。如果您真正想要的是将项目从子例程中取出然后放入数组中,Depesz's suggestion就是您需要的东西。

我强烈推荐perldoc perlreftut作为Perl中引用的介绍。您还可以查看perldoc perllolperldoc perldsc

如果你解释一下你真正想要做什么以及为什么这可能会有所帮助?