$combined_holdings[-1]->clone->compressed_to_last
: $combined_holdings[-1]->clone;
+ # next, get the end (or only) holding of the current
+ # holding being considered
+ my $holding_end;
+ if ($holding->is_compressed) {
+ $holding_end = $holding->is_open_ended ?
+ undef
+ : $holding->clone->compressed_to_last;
+ } else {
+ $holding_end = $holding;
+ }
+
# next, make sure $holding isn't fully contained
- my $holding_end = $holding->is_compressed ?
- $holding->clone->compressed_to_last
- : $holding;
- # if $holding is fully contained, skip it
- if ($holding_end le $last_holding_end) {
+ # if it is, skip it
+ if ($holding_end and $holding_end le $last_holding_end) {
next;
}
$holding->clone->compressed_to_first
: $holding;
+ # see if they overlap
if ($last_holding_end->increment ge $holding_start) {
# they overlap, combine them
- my $holding_end;
- if ($holding->is_compressed) {
- $holding_end = $holding->is_open_ended ?
- undef
- : $holding->compressed_to_last;
- } else {
- $holding_end = $holding;
- }
$combined_holdings[-1]->compressed_end($holding_end);
} else {
# no overlap, start a new group