这个子程序究竟做了什么?

时间:2012-03-13 18:35:57

标签: perl coding-style

我所拥有的一段历史Perl代码具有以下功能:

sub binds { join(",", ("?")x$_[0]) }

稍后使用binds(4)等进行调用。据我所知,它正在加入?,,但我对于究竟如何,我对x$_[0]部分的理解感到迷茫。

3 个答案:

答案 0 :(得分:10)

此函数采用整数(假设n)作为其第一个参数,并返回由逗号分隔的n个问号字符串。以下是它如何分解:

sub binds {
  join(",", ("?") x $_[0]);
  #         │     │ └──── the first argument to the subroutine.
  #         │     └── the repetition operator (think multiply).
  #         └─── a list containing only the string literal "?".
}
binds(4) # => "?,?,?,?"

它可能是数据库接口的实用程序函数,用于创建指定数量的?占位符,这些占位符稍后将作为SQL语句的一部分绑定到某些特定值。

答案 1 :(得分:3)

让我们问一下Perl关于如何解析它的意见。

$ perl -MO=Deparse -e'sub binds { join(",", ("?")x$_[0]) }'
sub binds {
    join ',', ('?') x $_[0];
}
-e syntax OK

添加一些空格后,部分变得清晰。

  • x是重复运算符。
  • $_[0]是第一个子例程参数,请参阅@_

答案 2 :(得分:1)

此代码生成一个由逗号分隔的问号列表,可能会在DBI应用程序中生成参数绑定点。

$ _ [0]是绑定数,绑定(4)会返回“?,?,?,?”。