尝试使用eval检查perl模块

Laz*_*man 1 perl eval

可能重复:
如何在使用之前检查我是否有Perl模块?

我想评估一个类似于这样的use语句:eval {use $ foo;}但是我遇到了正确的语法问题.我尝试了各种字符串插值组合,但即使对于不存在的模块,eval也会成功.有人可以帮我把这个吗?

mob*_*mob 6

你要找的成语是:

eval "use $module; 1" or ... ;

eval "use $module; 1" or warn "$module is not available: $@";
eval "use $module; 1" or die "This script requires $module";
eval "use $module; 1" or $module_available = 0;
Run Code Online (Sandbox Code Playgroud)

eval"总是成功",因为无论评估什么代码,程序执行都将继续 - 这实际上是一个eval声明的重点.如果计算的字符串包含错误 - 运行时或编译时 - eval调用的返回值是,undef并且$@将使用适当的错误消息设置特殊变量.

use即使成功,该声明也不会返回值.这就是为什么这个成语最后包含了" ; 1".