我想从Perl脚本中的数组元素中删除第一个字符。
我有这样的剧本:
@dash = split /\s+/, $dash;变量“破折号”是从文件中的特定行读取的:示例
21 A10 A11 A12 A13 .. 然后,我尝试将这些值推送到名为“花”的散列中。
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中。
任何帮助都是非常感谢的。
发布于 2013-04-17 17:50:59
为什么不直接改变裂缝中的正则表达式呢?
split /\s+\D?/, $dash;如果您想要的话,用这种方式将它们添加到@花中:
push( @flowers, split(/\s+\D?/, $dash) );发布于 2013-04-17 17:05:27
这将对@dash数组的每个元素进行操作:
@dash = split /\s+/, $dash;
shift @dash;
@dash = map { substr($_, 1) } @dash;您的substr($dash, 0, 2)是作为一个字符串在行上操作的,而不是其中的每个元素。
而且,除非您需要其他操作的索引:
push @flowers, @dash这将把@dash的所有元素都推到@flowers上。看起来就像你在做的。
发布于 2013-04-17 17:09:29
您需要某种循环,因为您希望对@dash的每个元素做一些事情,而不是第一个元素。map在这里很方便。
my @flowers = map substr($dash[$_], 1), 1..$#dash;这是短文的写法
my @flowers;
for (1..$#dash) {
push @flowers, substr($dash[$_], 1);
}https://stackoverflow.com/questions/16065928
复制相似问题