当前位置:  开发笔记 > 编程语言 > 正文

为什么Perl会挤压我的阵列?

如何解决《为什么Perl会挤压我的阵列?》经验,为你挑选了3个好方法。

这是一个简短的测试程序:

sub foo($;@) {
  my $sql = shift;
  my @params = @_;

  print "sql: $sql\n";
  print "params: " . join(",", @params);
}

sub bar($;@) {
  foo(@_);
}

bar("select * from blah where x = ? and y = ?",2,3);
print "\n";

为什么输出如下:

sql: 3
params: 

而不是这个?

sql: select * from blah where x = ? and y = ?
params: 2,3

Alnitak.. 20

这是因为当你调用时foo(@_),用于foo()强制第一个参数(即一个数组)的原型被转换为标量(这是元素的数量@_).

查看我之前提出的问题的答案" 为什么Perl函数原型不好 "?

FWIW,如果您改变原因,可以保留原型bar:

sub bar($;@) {
    foo(shift, @_);
}


Andrew Medic.. 10

你误解了Perl原型.删除它们,它会工作正常.

请参阅:为什么Perl 5的功能原型很糟糕?



1> Alnitak..:

这是因为当你调用时foo(@_),用于foo()强制第一个参数(即一个数组)的原型被转换为标量(这是元素的数量@_).

查看我之前提出的问题的答案" 为什么Perl函数原型不好 "?

FWIW,如果您改变原因,可以保留原型bar:

sub bar($;@) {
    foo(shift, @_);
}



2> Andrew Medic..:

你误解了Perl原型.删除它们,它会工作正常.

请参阅:为什么Perl 5的功能原型很糟糕?



3> Tarski..:

摆脱($;@)你的功能名称,它工作正常.

推荐阅读
携手相约幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有