+sub forget_oldest ($@) { #{{{
+ my $offset=shift;
+ my @pedigree=@_;
+ my @ret;
+ my $parent;
+ unless ($offset ge scalar(@pedigree)) {
+ for (my $i=0; $i < $offset; $i++) {
+ shift @pedigree;
+ }
+ while (@pedigree) {
+ # Doing so does not modify the original @pedigree, we've
+ # got our own copy of its "content" (i.e. a pile of
+ # references to hashes)...
+ $parent=shift @pedigree;
+ # ... but we have no copy of the referenced hashes, so we
+ # actually are modifying them in-place, which
+ # means the second (and following) calls to
+ # this function overwrite the previous one's
+ # reldepth values => known bug if PEDIGREE_BUT_ROOT and
+ # PEDIGREE_BUT_TWO_OLDEST are used in the same template
+ $parent->{reldepth}=($parent->{absdepth} - $offset);
+ push @ret, $parent;
+ }
+ }
+ return @ret;
+} #}}}
+