要将变量插入任何插值字符串(无论是它qq//
还是qx
或qr//
),只需执行"this is $foo!"
以下操作就足够了:变量名称(此处: )由不能是正常变量名称的一部分的$foo
分隔。!
如果按照 Perl 的命名规则,字符串的一部分可能是名称的一部分,这并不容易。例子:
my $genes = "ACTG$insert_genes_hereACTG";
Perl 认为变量名是$insert_genes_hereACTG
. 这可以通过
使用花括号来分隔名称:
my $genes = "ACTG${insert_genes_here}ACTG";
这总是有效的,是一个灵活的解决方案
连接字符串:
my $genes = "ACTG" . $insert_genes_here . "ACTG";
这对于非引号来说有点困难qq
。一种解决方案是创建一个临时变量来保存整个字符串,然后将其插入特殊引号中:
my $command = "mogrify -resize " . $wid . "x" . $hit. " *JPG";
`$command`;
一种变体是使用sprintf
插值:
my $command = sprintf 'mogrify -resize %dx%d *JPG', $wid, $hit;
顺便说一句,许多外壳插值问题可以通过不使用反引号而使用open
orsystem
来规避(取决于您是否需要输出)。
与open
:
open my $command, "-|", "mogrify", "-resize", $wid . "x" . $hit, glob("*JPG")
or die ...;
while (<$command>) { do something }
这完全绕过了 shell(而是exec
直接绕过了 s),因此必须手动完成通配。对于system
不止一个论点也是如此。