我想从Perl脚本中的数组元素中删除第一个字符。
我有这行脚本:
@dash = split /\s+/, $dash;
从我的文件的特定行读取变量“dash”:示例
21 A10 A11 A12 A13 ..
然后我尝试将这些值推送到名为“flowers”的哈希值
for $i (1..$#dash) {
push(@flowers, $line[$i]);
}
这似乎适用于我后续的脚本行中我需要的内容,但我发现$dash
在每个值前面都包含不需要的字符:
A10 A11 A12 A13 ..
而不是
10 11 12 13 .....
但我希望@flowers
包含:
10 11 12 13 ....
如何删除第一个字符之前我将其推送到哈希(@flowers)
chop(@flowers);
本来可以有效,但它只能删除最后一个字符。当我尝试使用
时substr($dash, 0, 2)
它确实产生了10
,但其余所有值A11 A12 A13
已不在我的@flowers
中。
感谢任何帮助。
答案 0 :(得分:3)
这将对@dash
数组的每个元素进行操作:
@dash = split /\s+/, $dash;
shift @dash;
@dash = map { substr($_, 1) } @dash;
你的substr($dash, 0, 2)
作为一个字符串在行上运行,而不是每个元素。
并且,除非您需要其他操作的索引:
push @flowers, @dash
这会将@dash
的所有元素推送到@flowers
。这看起来就像你在做什么。
答案 1 :(得分:1)
你需要某种循环,因为你想对第一个@dash
以外的每个元素做一些事情。 map
在这里很方便。
my @flowers = map substr($dash[$_], 1), 1..$#dash;
这是写作的简短方法
my @flowers;
for (1..$#dash) {
push @flowers, substr($dash[$_], 1);
}
答案 2 :(得分:1)
为什么不在分割中更改正则表达式?
split /\s+\D?/, $dash;
如果你愿意,可以用这种方式将它们添加到@flowers:
push( @flowers, split(/\s+\D?/, $dash) );
答案 3 :(得分:1)
我建议您从$dash
中取出所有数字序列,如下所示:
my $dash = '21 A10 A11 A12 A13 .. ';
my @flowers = $dash =~ /\d+/g;
shift @flowers;
print "@flowers";
<强>输出强>
10 11 12 13
答案 4 :(得分:0)
这是一个可能的解决方案:
use strict;
use warnings;
my $dash = "21 A10 A11 A12 A13"; #test data
my @dash = split /\s+/, $dash; #split into @dash array
shift @dash; #delete first array value
$_ = substr($_,1) for @dash; #for each item in array, remove the first character
print "@dash\n"; #prints: 10 11 12 13