微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我需要在bash shell上执行以下代码
mogrify -resize 800x600 *JPG

由于width和height是变量,所以我尝试过:

`mogrify -resize $widx$hit *JPG`

但是在编译中,我得到的是全局符号“$widx”在getattach.pl行131.中需要显式包名称错误,这是因为编译器将$widx视为新的未声明变量,而不是$wid和x.

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

在shell执行的反引号中插入变量名称的正确方法是什么?他们可以连接吗?

解决方法

要将变量插入任何内插字符串(无论是qq //还是qx或qr //),只需执行“this is $foo!”是足够的:变量名(这里:$foo)由!其不能是正常变量名称的一部分.

它不是那么容易,当字符串的部分可能是Perl的命名规则的名称的一部分.例:

my $genes = "ACTG$insert_genes_hereACTG";

Perl认为变量名为$insert_genes_hereACTG.这可以解决

>使用curlies分隔名称

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;

除此之外,许多shell插值问题可以通过不使用反引号来解决,而是使用open或system(取决于是否需要输出).

随着开放:

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

while (<$command>) { do something }

这完全绕过了shell(而且直接执行exec),所以必须手动完成globbing.对于具有多个参数的系统也是如此.

原文地址:https://www.jb51.cc/Perl/172632.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐