perl模块分割/屏蔽间隔

719*_*016 6 perl intervals

我使用Set :: IntervalTree代码来比较两组间隔.但是,我需要一个额外的方法,AFAIK目前尚未在此模块中实现.

我想有一个方法将一个间隔分成两个或多个.例如:

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    <= [Original Interval A]
           rrrrrrrrr                    <= [Interval B to mask against A]
xxxxxxxxxxx         xxxxxxxxxxxxxxxx    <= [Resulting Intervals A1 and A2]
Run Code Online (Sandbox Code Playgroud)

如果可以使用现有的Perl模块,任何想法?

编辑:

有关更多信息,每个间隔的大小可以是1到10亿(1E9),并且在每个间隔集中,间隔可以是1到1百万(1E6)个间隔.

Jef*_*der 3

Set::IntSpan确实想要你想要的,假设你需要整数边界作为你的间隔:

#!/usr/bin/perl -w
use strict;
use Set::IntSpan;

my $A    = new   Set::IntSpan '1-1000000000';
my $B    = new   Set::IntSpan '3-5,10-20,100-200,1000-2000';
my $C    = diff $A $B;

print $C;
Run Code Online (Sandbox Code Playgroud)

回报

1-2,6-9,21-99,201-999,2001-1000000000