为什么Perl压缩我的数组?
问题描述:
这里有一个短的测试程序:为什么Perl压缩我的数组?
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
答
这是因为当调用foo(@_)
,原型为foo()
迫使第一参数(这是一个数组),以被转换成一个标量(这是在@_
元素的数量)。
查看我之前提问“Why are Perl Function Prototypes Bad”的答案?
FWIW,你可以保持原型的地方,如果你改变bar
这样的:
sub bar($;@) {
foo(shift, @_);
}
答
摆脱($;@)
后你的函数名称,它工作正常。