sub defaults { my ($d1,$d2,$d3) = map { @_ ? shift : $_ } (1,2,3); print("$d1 $d2 $d3\n"); } defaults(); defaults(0); defaults(0, 0); defaults(0, 0, 0);