如何在反引号内正确使用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.对于具有多个参数的系统也是如此. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |