首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >删除Perl中数组元素的第一个字符

删除Perl中数组元素的第一个字符
EN

Stack Overflow用户
提问于 2013-04-17 17:01:05
回答 5查看 2.8K关注 0票数 1

我想从Perl脚本中的数组元素中删除第一个字符。

我有这样的剧本:

代码语言:javascript
复制
@dash = split /\s+/, $dash;

变量“破折号”是从文件中的特定行读取的:示例

代码语言:javascript
复制
21 A10 A11 A12 A13 .. 

然后,我尝试将这些值推送到名为“花”的散列中。

代码语言:javascript
复制
for $i (1..$#dash) {
    push(@flowers, $line[$i]);
}

这似乎适用于我接下来的脚本行中所需的内容,但我发现$dash在每个值前面包含了不需要的字符:

代码语言:javascript
复制
A10 A11 A12 A13 ..

而不是

代码语言:javascript
复制
10 11 12 13 .....

但我想让@flowers包含:

代码语言:javascript
复制
10 11 12 13 ....

如何删除第一个字符,然后才能将其推入散列表(@flowers)

代码语言:javascript
复制
chop(@flowers); 

本来可以的,但它只会把最后一个角色删掉。当我试图用

代码语言:javascript
复制
substr($dash, 0, 2)

它确实生成了10,但是A11 A12 A13的其余所有值都不再存在于我的@flowers中。

任何帮助都是非常感谢的。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-04-17 17:50:59

为什么不直接改变裂缝中的正则表达式呢?

代码语言:javascript
复制
split /\s+\D?/, $dash;

如果您想要的话,用这种方式将它们添加到@花中:

代码语言:javascript
复制
push( @flowers, split(/\s+\D?/, $dash) );
票数 1
EN

Stack Overflow用户

发布于 2013-04-17 17:05:27

这将对@dash数组的每个元素进行操作:

代码语言:javascript
复制
@dash = split /\s+/, $dash;
shift @dash;
@dash = map { substr($_, 1) } @dash;

您的substr($dash, 0, 2)是作为一个字符串在行上操作的,而不是其中的每个元素。

而且,除非您需要其他操作的索引:

代码语言:javascript
复制
push @flowers, @dash

这将把@dash的所有元素都推到@flowers上。看起来就像你在做的。

票数 3
EN

Stack Overflow用户

发布于 2013-04-17 17:09:29

您需要某种循环,因为您希望对@dash的每个元素做一些事情,而不是第一个元素。map在这里很方便。

代码语言:javascript
复制
my @flowers = map substr($dash[$_], 1), 1..$#dash;

这是短文的写法

代码语言:javascript
复制
my @flowers;
for (1..$#dash) {
   push @flowers, substr($dash[$_], 1);
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16065928

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档