Что именно делает эта подпрограмма? - PullRequest
4 голосов
/ 13 марта 2012

Кусок исторического Perl-кода, который у меня есть, имеет следующую функцию:

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

Позже он вызывается с binds(4) или подобным. Из того, что я могу сказать, это объединение ? с и , с, но я теряюсь относительно того, как именно, и при этом я не понимаю часть x$_[0].

Ответы [ 3 ]

10 голосов
/ 13 марта 2012

Эта функция принимает целое число (скажем, 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.

3 голосов
/ 13 марта 2012

Давайте спросим мнение Perl о том, как разобрать это.

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

С добавлением пробела части становятся прозрачными.

  • x является оператором повторения.
  • $_[0] - первый аргумент подпрограммы, см. @_.
1 голос
/ 13 марта 2012

Этот код генерирует список вопросительных знаков, разделенных запятыми, что может привести к созданию точек привязки параметров в приложении DBI.

$ _ [0] - это количество связей, binds (4) вернет "?,?,?,?".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...