違いをやっと理解した。
Carp モジュールを使うと、エラーメッセージを呼び出し側の視点から出力することが出来ます。そのモジュールではなく、呼び出し側の問題であることを示せるのです。
...
もし die する必要があるなら、croak を使いましょう。ただ、本当にあなたのモジュールの責任によるチェックの場合は、warn や die のままにしておきましょう。
warnだと、
No hostname given at /usr/local/lib/perl5/site_perl/5.6.0/Net/Acme.pm line 123.
となるが、carpだと
No hostname given at bad_code, line 10.
というふうに、エラーメッセージを呼び出し側の視点から出力することが出来る。
CGI書くときにおまじないのように使っていた、
の謎が解けた。