in reply to Re: Format a list with commas and
in thread Format a list with commas and "and"

sub list { join(" and ", reverse grep defined && length, pop @_, join(", ", @ +_)) }

Makeshifts last the longest.