+ -
当前位置:首页 → 问答吧 → 函数在返回数组的时候遇到了问题。。。大家都来看看:)

函数在返回数组的时候遇到了问题。。。大家都来看看:)

时间:2010-08-04

来源:互联网

我自认为这方面弄的挺明白的,没想今天出这么个问题。。。非想弄明白了这个foreach和shift操作上的差别。

当函数返回数组引用的时候foreach和shift操作起来是一样的:
  1. sub function {
  2.     my @temp = qw/a b c/;
  3.     return \@temp;
  4. }

  5. foreach my $var (@{&function}) {
  6.     print "$var\n";
  7. }

  8. my $one = shift (@{&function});
  9. print $one;
复制代码
当函数返回数组的时候shift就会出问题,提示:
Type of arg 1 to shift must be array (not subroutine entry)

代码:
  1. sub function {
  2.     my @temp = qw/a b c/;
  3.     return @temp;
  4. }

  5. foreach my $var (&function) {
  6.     print "$var\n";
  7. }

  8. my $one = shift (&function);
  9. print $one;
复制代码
从错误提示上看我需要做的应该是提示Perl传给shift的参数是一个数组。
我想了各种办法都没成功。。。

请大家给掌掌眼~~

作者: py   发布时间: 2010-08-04

回复 py


    因为返回的是一个参数列表,而不是一个array.
  1. foreach my $var qw/1 2 3/ {

  2.     print "$var\n";

  3. }


  4. my $one = shift ( qw/1 2 3/);
复制代码

作者: toniz   发布时间: 2010-08-04

看了下文档return返回的是列表,shift要的是real ARRAY

作者: yybmsrs   发布时间: 2010-08-04

可以这样:
shift( @{ [ &func ] } );

作者: dugu072_cu   发布时间: 2010-08-04