如果我按字面输入其参数,为什么这个子例程会起作用,但如果我以变量的形式给出参数呢?

Abd*_*del 1 perl

我使用的是perl软件包(Biomart),它包含一个名为addFilter()的子程序.该子程序需要一些参数,包括一个需要格式为"nr:nr:nr"的参数.

如果我按如下方式使用子程序,它可以正常工作:

$query->addFilter("chromosomal_region", ["1:1108138:1108138","1:1110294:1110294"]);
Run Code Online (Sandbox Code Playgroud)

但是,如果我像这样使用它,它不起作用:

my $string = '"1:1108138:1108138","1:1110294:1110294","1:1125105:1125105"';
$query->addFilter("chromosomal_region", ['$string']);
Run Code Online (Sandbox Code Playgroud)

由于我在for循环中构造了成千上万的这些参数,我真的需要第二种工作方式......可能导致这种情况的原因是什么?我希望有人可以帮助我,非常感谢!

hob*_*bbs 11

因为你似乎试图用不是Perl的语言写.'"this","that","another"'不是数组,它是一个字符串.并且'$string'不会$string以任何方式进行插值或包含,因为它使用单引号.它只生成一个以美元符号开头并以"string"结尾的字符串.

更像你想要的东西:

my @things = ("1:1108138:1108138","1:1110294:1110294","1:1125105:1125105");
$query->addFilter("chromosomal_region", \@things);
Run Code Online (Sandbox Code Playgroud)

-要么-

$query->addFilter("chromosomal_region", [ @things ] );
Run Code Online (Sandbox Code Playgroud)

要动态构建它,您可以简单地push @things, $value循环或任何您需要的东西.


Woo*_*ble 6

'$string'字面意思是"$ string"; 变量不会被其内容替换.丢失单引号.

当然,不太可能将引用传递给由单个逗号分隔的字符串组成的数组,其中嵌入了引号,这与将引用传递给字符串数组的方式相同.

尝试类似的东西:

my $ref = ["1:1108138:1108138","1:1110294:1110294"];
$query->addFilter("chromosomal_region", $ref);
Run Code Online (Sandbox Code Playgroud)