Perl:如何在不创建副本的情况下将数组引用转换为数组

For*_*ann 2 arrays perl reference

在C#中,可以创建对引用类型的引用:

SomeObject origObj = new SomeObject();
SomeObject objRef = origObj;
Run Code Online (Sandbox Code Playgroud)

origObj和objRef都指向同一个对象.

现在,在perl中:

my @arr = (1,2,3);
method(\@arr);

sub method
{
  my $arr_ref = shift;
  foreach my $element (@{$arr_ref})
  {
     #...
  }
}
Run Code Online (Sandbox Code Playgroud)

我希望在方法中使用"@myArr",而不是每次都要进行转换:"@ {$ arr_ref}" - 并且在不创建数组副本的情况下执行此操作(因为我的"@myArr = @ {$ arr_ref}"将创建一个副本).

总结一下:如何在不创建副本的情况下获得"@myArr = @ {arr_ref}"?

tob*_*ink 7

如果你很高兴@myArr成为一个包变量(our)而不是一个词法变量(my),你可以这样做:

our @myArr;
local *myArr = $arr_ref;
Run Code Online (Sandbox Code Playgroud)

这将使@myArr像$ arr_ref所指向的数组的别名一样.

如果你需要@myArr词法,那么你可以使用Data :: Alias:

use Data::Alias;
alias(my @myArr = @$arr_ref);
Run Code Online (Sandbox Code Playgroud)