#!/usr/bin/perl # # author: Bliako # date: 10/09/2018 # for: https://perlmonks.org/?node_id=1222031 # use strict; use warnings; use IntervalTree; use Data::Dumper; # create the tree my $tree = IntervalTree->new(); while(){ chomp; next if $_ =~ /^\s*$/; my @items = split /\s+/; $tree->insert(@items[1,2,3]); } close(DATA); print_tree($tree); # print all the intervals sub print_tree { my $atree = shift; $atree->traverse( # specify a func to be run on every node as returned by traverse() sub { my $anode = $_[0]; print "traverse() : ".$anode->{interval}." => ".$anode->str()."\n"; } ); } __DATA__ Chr1 30000 32000 A3 Chr1 28000 29000 B2 Chr1 12000 18500 B1 Chr1 1000 4000 A1 Chr1 42000 44000 A4 Chr1 15000 22000 A2