如何将命令行参数中的变量插入到字符串中?

时间:2017-06-03 14:26:45

标签: perl

我的程序采用命令行参数,我想用它来更改Perl脚本的工作目录。

use strict; 
use warnings;
use Getopt::Std; 
use Cwd 'chir';

my %opts=(); 
getopts('a:v:l:', \%opts); 
my $application = $opts{a}; 
my $version = $opts{v}; 
my $location = $opts{l}; 

print "$application, $version, $location\n"; 

if($application eq 'abc') {
    #print "you came here\n"; 
    chdir "/viewstore/ccwww/dst_${application}_${version}/abc/${location}";
    print $ENV{PWD}; 
    print "you came here\n"; 
}

我之前尝试使用chdir '/var/tmp/dst_$application/$version/$location';,但这也无效。

当前版本的代码会发出此警告。

  

全球符号" $ application _"需要在./test.pl第20行显式包名。由于编译错误,./test.pl的执行中止。

第20行是chdir

1 个答案:

答案 0 :(得分:0)

您在''命令中使用单引号chdir。单引号不在Perl中进行变量插值。这意味着'/var/tmp/dst_$application/...'表示/var/tmp/dst_$application/...,而不是/var/tmp/dst_foo/...

您需要使用双引号""在字符串中插入变量。

chdir "/var/tmp/dst_$application/$version/$location";

这将创建/var/tmp/dst_foo/...

如果需要将变量与字符串的其余部分分开,请使用此表示法。

print "${foo}bar";

这与"$foobar"不同,因为Perl认为整个$foobar是变量名。