gpt4 book ai didi

perl - 如何在反引号内正确使用perl变量名?

转载 作者:行者123 更新时间:2023-12-03 19:53:40 24 4
gpt4 key购买 nike

我需要在bash shell上执行以下代码:

mogrify -resize 800x600 *JPG


由于width和height是变量,因此我尝试了以下操作:

`mogrify -resize $widx$hit *JPG`


但是在编译中,我得到的错误是 Global symbol "$widx" requires explicit package name at getattach.pl line 131.,这是因为编译器将$ widx视为未声明的新变量,而不是将$ wid和x分开。

我尝试在反引号内插入双引号,但是代码的执行停止了,没有任何消息。

在反引号中插入变量名称以执行Shell的正确方法是什么?它们可以串联吗?

最佳答案

要将变量插入任何插值字符串(qq//qxqr//),只需执行"this is $foo!"就足够了:变量名(此处为$foo)由!分隔,不能是普通变量名的一部分。

根据Perl的命名规则,字符串的一部分可以成为名称的一部分并不是那么容易。例:

my $genes = "ACTG$insert_genes_hereACTG";


Perl认为变量名称为 $insert_genes_hereACTG。这可以通过解决


使用curl来分隔名称:

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;



顺便说一句,可以通过不使用反引号,而使用 opensystem(取决于您是否需要输出)来避免许多外壳插值问题。

使用 open

open my $command, "-|", "mogrify", "-resize", $wid . "x" . $hit, glob("*JPG")
or die ...;

while (<$command>) { do something }


这完全绕过了外壳程序(而不是直接 exec),因此必须手动完成globbing。对于具有多个参数的 system,也是如此。

关于perl - 如何在反引号内正确使用perl变量名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17009469/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com