#! /usr/bin/perl use strict; use warnings; map { print "$_->[0] -> $_->[1]\n" } &{ sub { return @_ == 1 ? undef : ( [ splice @_, -2 ], @_ == 1 ? () : &{ $_[0] }(@_) ); } }( sub { return @_ == 1 ? undef : ( [ splice @_, -2 ], @_ == 1 ? () : &{ $_[0] }(@_) ); }, %{ { x => 5, y => 8, z => 42 } } );