in reply to Re: Re (tilly) 1 (duh): Assemble times into ranges
in thread Assemble times into ranges

The depth variable tells you how many events fall in it. If you want to instead know the intervals, you could use a hash there instead. Click for code if you want an example...
#!/usr/bin/perl -w use strict; # The original data structure my %interval = qw( 5 50 20 30 70 90 120 130 ); # The times my @times = qw(4 9 30 98 125 500); # Current intervals open - start with none my %open_intervals; # Let us rearrange the interval information # into events consisting of a time/action my @events; foreach my $start (keys %interval) { my $end = $interval{$start}; my $int = "[$start - $end]"; if ($end < $start) { die "In interval '$int', the end is before the start?"; } push @events, [$start, 0, sub {$open_intervals{$int}++}], [$end, 2, sub {delete $open_intervals{$int}}]; } push @events, map { my $time = $_; [ $_, 1, sub { my @ints = keys %open_intervals; print "Time $time is in intervals (@ints)\n" } ] } @times; # Sort it and read out the answer: foreach my $event ( sort { $a->[0] <=> $b->[0] or $a->[1] <=> $b->[1] } @events ) { $event->[2]->(); }