Новорожденный разработчик Perl здесь. Я размахивал своим мозгом и искал по сети, пытаясь понять это ... раздраженно, я прихожу к вам, ищущий ясности.Как передать массив Perl в виде скаляра в подпрограмму?
Я следующий код (только соответствующие части оставили в), а остальные работают):
my @arrMissingTids;
@arrMissingTids = %hshTids;
my $missingtid;
foreach $missingtid (@arrMissingTids) {
print "$missingtid\n";
}
Это хорошо работает, возвращая значения, я хочу быть в массиве:
500000246,500000235,500000185,500000237,500000227,500000252
Однако, когда я передаю это подпрограмме и включаю ее в имя переменной, она не содержит список, как написано выше, а скорее номер 1. Код для этого ниже:
myqry(@arrMissingTids);
sub myqry($) {
my $missingtids = @_;
$sql = "select
i.tid i_tid, i.name i_name
from
instrument i
where i.tid in ($missingtids)";
print "$sql/n";
}
печати $ SQL возвращает следующее:
Select i.tid i_tid, i.name i_name from instrument i where i.tid in (1)
Когда я хочу, чтобы вернуть следующее:
Select i.tid i_tid, i.name i_name from instrument i where i.tid in (500000246,500000235,500000185,500000237,500000227,500000252)
Заранее спасибо за любые указатели в правильном направлении!
[Почему прототипы функций Perl-плохо?] (http://stackoverflow.com/questions/297034/why-are-perl-5s-function-prototypes-bad) – daxim
Я чувствую себя вынужденным упомянуть, что построение sql-запроса путем интерполяции является угрозой безопасности. http://bobby-tables.com/ –
это из-за '($)', см. мой ответ;) – delicateLatticeworkFever