to another subroutine, pass it by putting the `&` before its name. On the parameter side, you could happily use a `Scalar`, but using the `&` sigil there too offers convenient calling. sub run-without-banned-options(&run, %options, @banned) { my %filtered = %options; %filtered{@banned}:delete; run(|%filtered); } sub operate(:$force, :$strip, :$verbose) { say $force, $strip, $verbose; } my %opts = force => 1, verbose => 1; my @banned = 'force', 'strip'; run-without-banned-options(&operate, %opts, @banned); !233