Unexpected result when string is concatenated in perl

I am trying to execute below script but not getting the desired output. it seems that he still retains the old value and continues to concatenate it.

./test.pl -v v10, v11, v12

Actual result => 'v10', 'v11', 'v10', 'v12', 'v10', 'v11', 'v10'

Expected Result => 'v10', 'v11', 'v12'

Help solve the problem?

#!/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; 
+4
source share
2 answers

It:

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

It should only be:

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

$foo .= $bar ; is equivalent to:

 $foo = $foo . $bar; 

So $finalVersionList .= "'$ver',$finalVerionList"; is equivalent to:

 $finalVersionList = $finalVersionList . "'$ver',$finalVersionList"; 
+4
source

Edit:

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

To:

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

Here you make a few additions. What you are initially equivalent to:

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

This is not what you want. If you want '$ver$', be in a list from a list, you can do:

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

or

  $finalVersionList = "'$ver',$finalVersionList"; 
+2
source

All Articles