別のモジュールを必要としない必要最小限のソリューションを次に示します。
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';
場合、実行時に新しいコードを解析してコンパイルしても意味がありません。)require
import
eval { ... }
最後に、ここでのandの使用は$@
、この例の目的のために簡潔であることに注意してください。実際のコードでは、Try::Tinyのようなものを使用するか、少なくともそれが対処する問題に注意する必要があります。