简体   繁体   English

在perl中连接字符串时出现意外结果

[英]unexpected result while concatenating string in perl

I am trying to execute below script but not getting desired output. 我正在尝试执行以下脚本,但未获得所需的输出。 it seems like it is still preserving old value and keep concatenating it. 似乎它仍然保留着旧的价值并不断地将其串联起来。

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

Actual Result => 'v10','v11','v10','v12','v10','v11','v10' 实际结果=>'v10','v11','v10','v12','v10','v11','v10'

Expected Result => 'v10','v11','v12' 预期结果=>'v10','v11','v12'

can you please help resolve the issue? 您能帮忙解决这个问题吗?

#!/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;

This: 这个:

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

Should just be : 应该只是:

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

$foo .= $bar ; $foo .= $bar ; is equivalent to : 等效于:

$foo = $foo . $bar;

So, $finalVersionList .= "'$ver',$finalVerionList"; 因此, $finalVersionList .= "'$ver',$finalVerionList"; is equivalent to : 等效于:

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

Change: 更改:

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

To: 至:

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

You're doing multiple appends here. 您正在这里进行多个追加。 What you had originally is equivalent to: 您最初拥有的等同于:

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

Which is not what you want. 这不是您想要的。 If you want '$ver$', to be at the fromt of the list, you could do: 如果您希望'$ver$',位于列表的首位,则可以执行以下操作:

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

or: 要么:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM