I can think of a couple ways to do that now:
$re = qr/${\do{join '|', @days}}/
(as you would interpolate any expression in to any double-quotish construct), or
$re = qr/(??{join '|', @days})/
which only evaluates the code when the regex is actually
executing (and indeed may evaluate it more than once if
backtracked over).
Both forms may have problems with finding the end of the code given e.g. an unmatched } within the code; the latter
currently has unfortunate interaction with lexical vars.