2013-04-23 29 views
4

我想执行下面的脚本,但没有得到所需的输出。它似乎仍然保留了旧的价值并保持连结。意外的结果,而连接字符串中的perl

./test.pl -v V10,V11,V12

实际结果> 'V10', 'V11', 'V10', 'V12', 'V10', 'V11','V10 '

预期结果=> 'V10',' V11' , 'V12'

可以请您帮助解决问题?

#!/usr/bin/perl 

use strict; 
use warnings; 
use Getopt::Long; 

my ($versionFlag,$finalVersionList); 

sub validateInputAndFilter 
{ 
     my ($passedVersionList) = @_; 
     $finalVersionList =""; 

     my @versionList = split(",",$passedVersionList); 
     foreach my $ver (@versionList) 
     { 
       if($ver =~ m/^v[0-9][0-9]$/) 
       { 
         $finalVersionList .= "'$ver',$finalVersionList"; 
       } 
       else 
       { 
         print "\nWARNING: Passed version *** $ver *** is NOT in expected format...skipping...\n"; 
       } 
     } 
     $finalVersionList =~ s/\,$//; 
     print "\n\nfinalVersionList => $finalVersionList\n\n"; 
} 

GetOptions('v|version=s' => \$versionFlag) || die "Please pass version list separated by comma"; 

if(defined $versionFlag) 
{ 
     &validateInputAndFilter("$versionFlag"); 
} 
else 
{ 
     die "Please pass version list separated by comma"; 
} 
exit 0; 
+2

你或许应该避免使用'$ finalVersionList'作为一个全局变量时,你可以这么容易通过在子文件中使用'return $ finalVersionList'来保持它的词法。 – TLP 2013-04-23 17:17:20

回答

4

此:

$finalVersionList .= "'$ver',$finalVersionList"; 

应该仅仅是:

$finalVersionList .= "'$ver,'"; 

$foo .= $bar;相当于:

$foo = $foo . $bar; 

所以,$finalVersionList .= "'$ver',$finalVerionList";相当于:

$finalVersionList = $finalVersionList . "'$ver',$finalVersionList"; 
+0

感谢您指出我的愚蠢的错误 – user2083779 2013-04-23 17:29:38

2

变化:

$finalVersionList .= "'$ver',$finalVersionList"; 

要:

$finalVersionList .= "'$ver',"; 

你做得多追加这里。你原本相当于:

$finalVersionList = $finalVersionList . "'$ver',$finalVersionList"; 

这不是你想要的。如果你想'$ver$',是在fromt列表,你可以这样做:

$finalVersionList = "'$ver'," . $finalVersionList; 

或:

$finalVersionList = "'$ver',$finalVersionList"; 
+0

根据他的投入和预期的产出来判断,我确实认为他想做'$ finalVersionList。=''$ ver','; – kjprice 2013-04-23 17:12:49

+0

@jkprice好点;我正在按他的代码去。 – 2013-04-23 17:13:27