使用索引将字符串拆分为多个子字符串

cuc*_*bit -6 perl

我有这个字符串和哈希:

输入数据:

my $string = 'GATGCAGTTAGGCGTAGCAGAGTGAGACGACGACGATATTAGGACCCGGTAAGGCACAATATAGC';
my %coord_colors = (
  10 => "red",
  48 => "orange",
  60 => "purple",
);
Run Code Online (Sandbox Code Playgroud)

我想要做的是在每个散列键位置"打开"字符串,并插入键值.查看所需的输出以了解我正在尝试解释的内容:

期望的输出:

GATGCAGTTAredGGCGTAGCAGAGTGAGACGACGACGATATTAGGACCCGorangeGTAAGGCACAATpurpleATAGC
Run Code Online (Sandbox Code Playgroud)

我知道substr和split函数是如何实现的,但我并没有激发如何"同时"分割几个部分的字符串,然后引入另一个字符串,最后加入.我已经考虑过做一个循环,并在添加第一个位置的同时改变位置,但我想知道找出这个任务的最佳方法.

Сух*_*й27 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;
Run Code Online (Sandbox Code Playgroud)

产量

GATGCAGTTAredGGCGTAGCAGAGTGAGACGACGACGATATTAGGACCCGorangeGTAAGGCACAATpurpleATAGC

使用正则表达式,

$string =~ s|.{$_}\K|$coord_colors{$_}|s
  for sort { $b <=> $a } keys %coord_colors;
Run Code Online (Sandbox Code Playgroud)