必須の引数とオプショナルな引数の順序に悩む修行、その後の発見
必須の引数とオプショナルな引数の順序に悩む修行 - 昨日知ったことにて、オプショナルな引数を必須の引数の前に書くメソッドの定義はどうだろう、ということを書いた。
my $stuff = new Stuff(code => q/353/, flag => 1, $string);
そういう例はみたことがないというコメントをいただいたのだが、このほど、こういう順序を採用しているメソッドを発見した (コンストラクタではないけれど)。
AnyEvent::HTTP - simple but non-blocking HTTP/HTTPS client - metacpan.org の http_get や http_request がそれ。
http_get $url, key => value..., $cb->($data, $headers)
と必須のコールバックを最後に置き、オプショナルな引数を前置している (さらにその前にもうひとつの必須引数である URL がついている)。
ソースを見ても
sub http_request($$@) { my $cb = pop; my ($method, $url, %arg) = @_;
となっていて、pop で引数を取得している。