必須の引数とオプショナルな引数の順序に悩む修行

あるクラス Stuff のコンストラクタには文字列を渡す。

my $stuff = new Stuff($string);

で、オプショナルな引数は名前つきの引数で渡したい。そのとき、こういう風に書くのはどうだろうか。

my $stuff = new Stuff(code => q/353/, flag => 1, $string); # ... (1)

必須の引数は先頭で渡すべきだろうか。

my $stuff = new Stuff($string, code => q/353/, flag => 1); # ... (2)

UNIX 系のコマンドの影響か、オプショナルなものは先に書く (1) のほうが、自分としてはすんなり理解できる。(1) の場合、コンストラクタで引数を shift して pop して、という変則的なコードになる。

sub new {
    my $class = shift;
    my $string = pop;
    my %args = @_;
    my $instance = {};
    ...
    bless $instance, $class;
}

はたして (1) と (2)、どっちがいいんだろう。もっと別のやりかたがいいのかもしれないな。