達人の方知恵をください。

引数の内容や数でサブルーチンの処理を動的に変えたいです。
例えば引数の和を返す場合に処理の部分をスマートに書く方法はありますか?

add($a);
add($a, $b);
add(@c);
add(\@d, \@e);

sub add
{
処理;
return $ans;
}