我有一个字符串说,s1 ='hello',我想像数组一样操作它,例如在c ++中我们可以使用s1 [i]来单独处理这个数组的字符,我们如何在perl中进行操作?我想在s1 [0]添加字符,字符为s1 [1]。我尝试使用
$s=join('',$s1[0],$s1[1]); $s=$s1[0].$s1[1]; $s=${s1[0]}.${s2[0]};
但无法连接字符。我想添加h和e并将他,类似e和l作为el等等,直到单词的结尾然后继续下一个单词。
我也可以检查s [i]是否在列表中(b,c,d,h,l),如果s [i + 1]在(a,e,i,o,u)中,那么添加s [i]和s [i + 1]。
示例输入:
你好是盘子来电者样品输出:
他,我 di s k
ca l le r
答案 0 :(得分:1)
基本上,您希望在两个单词字符之间插入一个空格,只要它们不在您指定的两个单词集中。
您可以使用其他人演示的substr
来执行此操作,但这种类型的文本操作是正则表达式设计的一件事:
use strict;
use warnings;
while (<DATA>) {
s/(?![bcdhl][aeiou])\w\K(?=\w)/ /g;
print;
}
__DATA__
hello
disk
caller
输出:
he l lo
di s k
ca l le r
答案 1 :(得分:0)
像这样,使用substr()
挑选个别字符:
perl -E '$s="hello";say substr($s,0,1),substr($s,4,1)'
输出:
ho
答案 2 :(得分:0)
substr()是可行的:
print substr($s, $_, 1), " " for (0..length($s) - 1)
输出:
h l l l o
substr()对于就地操作也是可以的,只要它返回ref-value:
substr($s,0,2) = '';
say $s;
输出:
LLO
答案 3 :(得分:0)
my @char_array = split "", $s1;
@char_array
现在包含$s1
字符串的所有字符,并且可以对其进行操作,迭代或对其执行任何操作,就像使用任何其他数组一样。
答案 4 :(得分:0)
您可以splice
在数组的给定位置插入元素:
echo -e 'hello\ndisk\ncaller' | perl -F'' -ane ' splice (@F,2,0," "); splice(@F,4,0," "); foreach(@F){print}'
he l lo
di s k
ca l ler
在使用数组时,您可以使用Data :: Dumper实现更好的可视化:
echo -n 'hello' | perl -MData::Dumper -F'' -ane ' splice (@F,2,0," "); splice(@F,4,0," ");print Dumper(\@F)'
$VAR1 = [
'h',
'e',
' ',
'l',
' ',
'l',
'o'
];