我的程序采用命令行参数,我想用它来更改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
。
答案 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
是变量名。