我有一个字符串输入,让我们说:
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
答案 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才能摆脱换行符