2017-06-03 78 views
-4

我的程序需要一個命令行參數,我想用它來改變我的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

我已經嘗試使用 – mahesh

+0

使用Getopt :: Std; my%opts =(); getopts('a:v:l:\%opts); my $ application = $ opts {a}; my $ version = $ opts {v}; my $ location = $ opts {l}; if($ application eq'abc') { chdir'/ var/tmp/dst_ $ application/$ version/$ location'; } – mahesh

+0

我在dst_ $應用程序附近出現異常,因爲集中錯誤 – mahesh

回答

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是變量名。

+0

我已經嘗試過雙引號,但是這些值在腳本中沒有被替換,我正在從命令行參數更新那些變量 – mahesh

+0

@mahesh請用您現在的代碼更新您的問題。 – simbabque

+0

使用嚴格; 4使用警告; 6使用Getopt :: Std; 8 my%opts =(); 9 getopts('a:v:l:',\%opts); 10 my $ application = $ opts {a}; 11 my $ version = $ opts {v}; 12 my $ location = $ opts {l}; 14 print「$ application,$ version,$ location \ n」; 16 if($ application eq'abc') 18 { 19 #print「你來到了這裏\ n」; 20 chdir「/ viewstore/ccwww/dst_ $ application_ $ version/abc/$ location」; 21 print「you came here \ n」; 22} – mahesh

相關問題