perl5の話題。 use FooとするとFooをrequireしつつ、Foo->importが呼ばれることはよく知られているが、 use Foo ()としたときには、importは呼ばれない。 これをどういう風にして実現しているのか前から疑問に思っていた。 というのも普通の関数は「引数なし」と「空リストの引数」を区別できないからだ。 perlのソースコードをみたところ、 parseのところで「引数なし」と「空リストの引数」を区別しているとわかった。 https://github.com/Perl/perl5/blob/v5.24.0/op.c#L6048 https://github.com/Perl/perl5/blob/v5.24.0/perly.y#L346-L354 追記 import を呼ばないための記法として use Foo () が用意された、という経緯があった気がしますん