別のモジュールを必要としない必要最小限のソリューションを次に示します。
my $rc = eval
{
require Term::ReadKey;
Term::ReadKey->import();
1;
};
if($rc)
{
# Term::ReadKey loaded and imported successfully
...
}
以下のすべての回答 (これより下にあることを願っています! :-)eval { use SomeModule }が間違っていることに注意してください。これは、useステートメントがコード内のどこにあるかに関係なく、コンパイル時に評価されるためです。したがって、SomeModuleが利用できない場合、スクリプトはコンパイル時にすぐに終了します。
(ステートメントの文字列 evaluseも機能します ( ) が、 /ペアが同じことを行い、起動時にコンパイル時に構文チェックされるeval 'use SomeModule';場合、実行時に新しいコードを解析してコンパイルしても意味がありません。)requireimport
eval { ... }最後に、ここでのandの使用は$@、この例の目的のために簡潔であることに注意してください。実際のコードでは、Try::Tinyのようなものを使用するか、少なくともそれが対処する問題に注意する必要があります。