#
# @newlist = semijoin($expr, $itemcount, @list);
#
# $expr - A string to be used in a join() call.
# $itemcount - The number of items in a list to be joined.
# It may be negative.
# @list - The list
#
# Create a new list by performing a join on I<$itemcount> elements at
+a
# time on the original list. Any leftover elements from the end of the
# list become the last item of the new list, unless I<$itemcount> is
# negative, in which case the first item of the new list is made from
+the
# leftover elements from the front of the list.
#
sub semijoin
{
my($jstr, $itemcount, @oldlist) = @_;
my(@newlist);
return @oldlist if ($itemcount <= 1 and $itemcount >= -1);
if ($itemcount > 0)
{
push @newlist, join $jstr, splice(@oldlist, 0, $itemcount)
while @oldlist;
}
else
{
$itemcount = -$itemcount;
unshift @newlist, join $jstr, splice(@oldlist, -$itemcount, $i
+temcount)
while $itemcount <= @oldlist;
unshift @newlist, join $jstr, splice( @oldlist, 0, $itemcount)
if @oldlist;
}
return @newlist;
}