我有这个字符串和哈希:
输入数据:
my $string = 'GATGCAGTTAGGCGTAGCAGAGTGAGACGACGACGATATTAGGACCCGGTAAGGCACAATATAGC';
my %coord_colors = (
10 => "red",
48 => "orange",
60 => "purple",
);
我想要做的是在每个哈希键位置“打开”字符串,然后插入键值。查看所需的输出,以了解我正在尝试解释的内容:
期望的输出:
GATGCAGTTAredGGCGTAGCAGAGTGAGACGACGACGATATTAGGACCCGorangeGTAAGGCACAATpurpleATAGC
我知道substr和split函数是如何实现的,但我并没有想过如何“同时”分割几个部分的字符串,然后引入另一个字符串,最后加入。我已经考虑过做一个循环,并在添加第一个位置的同时改变位置,但我想知道找出这个任务的最佳方法。
答案 0 :(得分:7)
您可以使用substr()
作为左值并开始从右侧替换字符串,
my $string = 'GATGCAGTTAGGCGTAGCAGAGTGAGACGACGACGATATTAGGACCCGGTAAGGCACAATATAGC';
my %coord_colors = (
10 => "red",
48 => "orange",
60 => "purple",
);
substr($string,$_,0) = $coord_colors{$_}
for sort { $b <=> $a } keys %coord_colors;
print $string;
输出
GATGCAGTTAredGGCGTAGCAGAGTGAGACGACGACGATATTAGGACCCGorangeGTAAGGCACAATpurpleATAGC
使用正则表达式,
$string =~ s|.{$_}\K|$coord_colors{$_}|s
for sort { $b <=> $a } keys %coord_colors;