in reply to Re^5: Assigning default values to function arguments which may be "empty"
in thread Assigning default values to function arguments which may be “empty”

As choroba wrote, it is not needed. Analyzed from right to left, it constructs a two-element-list of the (possibly undefined) argument and the default value. Grep applies the length function and filters the list according to that. We take the first element of grep's result.

Edge cases: Thus we'll skip an undefined or empty argument, just as desired by OP. Efficiency is only medium, because list construction and grep are more work than one or two single tests.