Perl:foreach字符串数组,拆分字符串,将每个字符串设置为一个新数组

时间:2015-04-02 21:07:09

标签: perl

我有一个字符串输入,让我们说:

junk 0 0 :::1000
junk 0 0 :::1001
junk 0 0 :::1002
junk 0 0 :::1009

我只想要100X数字的最后一位数字,我想将它放在一个字符串中,并使用这些字符串填充数组。

我有以下代码

my @lines = split /^/, $input;

foreach my $line (@lines)
{
  my ($garb, $long_ports)  = (split /\s*:::\s*/, $line);

  my ($garb2, $ports) = (split /10/, $long_ports);

  if ($ports < 10)
  {
    my ($garb3, $ports2) = (split /0/, $ports);

    #Add 0 since 0 port is split to empty string
    if (length($ports2) == 0)
    {
      $ports2 = "0$ports2";
    }

    #Create file name format
    @locked_ports = ".X$ports2-lock";
  }
}

当我print "@locked_ports"时,我只获得值.X9-lock,当我想要所有4时。

如何使@locked_ports包含所有4个字符串?:

.X0-lock
.X1-lock
.X2-lock
.X9-lock

3 个答案:

答案 0 :(得分:2)

您只需使用push将每个所需结果添加到数组的末尾。这是一个示例代码段:

foreach my $line (@lines) {
    chomp $line;
    if ($line =~ /(\d)$/) {
        push @ports, ".X$1-lock";
    }
}

答案 1 :(得分:1)

尝试一个简单的方法就是改变这个:

 @locked_ports = ".X$ports2-lock";

为:

push @locked_ports,"X${ports2}-lock";

另外,请确保您使用的是use strict'use warnings;,并将代码段发布到您声明@locked_ports的位置并打印出来。

答案 2 :(得分:1)

当你按如下方式修改你的代码时,它会运行

my @lines = split /^/, $input;

foreach my $line (@lines)
{
 chomp($line);
 my ($garb, $long_ports)  = (split /\s*:::\s*/, $line);

 my ($garb2, $ports) = (split /10/, $long_ports);

 if ($ports < 10)
 {
   my ($garb3, $ports2) = (split /0/, $ports);
   #Add 0 since 0 port is split to empty string
   if (length($ports2) == 0)
   {
     $ports2 = "0$ports2";
   }

   #Create file name format
   push @locked_ports, ".X$ports2-lock";
  }
}

你必须push @locked_ports末尾的锁定和chomp $ line才能摆脱换行符