加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-15 21:30:31 所属栏目:大数据 来源:网络整理
导读:我需要在bash shell上执行以下代码: mogrify -resize 800x600 *JPG 由于width和height是变量,所以我尝试过: `mogrify -resize $widx$hit *JPG` 但是在编译中,我得到的是全局符号“$widx”在getattach.pl行131.中需要显式包名称的错误,这是因为编译器将$wid
我需要在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.对于具有多个参数的系统也是如此.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读