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

时间:2015-06-09 10:56:24

标签: perl

我有这个字符串和哈希:

输入数据:

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

我想要做的是在每个哈希键位置“打开”字符串,然后插入键值。查看所需的输出,以了解我正在尝试解释的内容:

期望的输出:

GATGCAGTTAredGGCGTAGCAGAGTGAGACGACGACGATATTAGGACCCGorangeGTAAGGCACAATpurpleATAGC

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

1 个答案:

答案 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;