从Perl子程序返回整个数组效率低下吗? [英] Is returning a whole array from a Perl subroutine inefficient?

查看:111
本文介绍了从Perl子程序返回整个数组效率低下吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我经常在Perl中有一个用一些信息填充数组的子程序。由于我也习惯于使用C ++进行黑客攻击,所以我发现自己经常在Perl中使用引用来完成它:

  my @array; 
getInfo(\ @ array);

getInfo {
my($ arrayRef)= @_;
push @ $ arrayRef,obama;
#...
}

而不是更直接的版本:

  my @array = getInfo(); 

sub getInfo {
my @array;
推@array,奥巴马;
#...
return @array;
}

当然,原因是我不希望数组在子程序中本地创建,然后在返回时复制。

是吗?还是Perl优化呢?

解决方案

如何在第一时间返回数组引用?

  sub getInfo {
my $ array_ref = [];
push @ $ array_ref,'foo';
#...
return $ array_ref;
}

my $ a_ref = getInfo();
#或者如果你希望数组扩展
my @array = @ {getInfo()};

编辑根据德曼的评论:



  sub getInfo {
我的也可以在函数中使用普通数组并返回一个引用。 @array;
推@array,'foo';
#...
return \ @ array;
}


I often have a subroutine in Perl that fills an array with some information. Since I'm also used to hacking in C++, I find myself often do it like this in Perl, using references:

my @array;
getInfo(\@array);

sub getInfo {
   my ($arrayRef) = @_;
   push @$arrayRef, "obama";
   # ...
}

instead of the more straightforward version:

my @array = getInfo();

sub getInfo {
   my @array;
   push @array, "obama";
   # ...
   return @array;
}

The reason, of course, is that I don't want the array to be created locally in the subroutine and then copied on return.

Is that right? Or does Perl optimize that away anyway?

解决方案

What about returning an array reference in the first place?

sub getInfo {
  my $array_ref = [];
  push @$array_ref, 'foo';
  # ...
  return $array_ref;
}

my $a_ref = getInfo();
# or if you want the array expanded
my @array = @{getInfo()};

Edit according to dehmann's comment:

It's also possible to use a normal array in the function and return a reference to it.

sub getInfo {
  my @array;
  push @array, 'foo';
  # ...
  return \@array;
}      

这篇关于从Perl子程序返回整个数组效率低下吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆