【发布时间】:2016-07-29 16:33:37
【问题描述】:
概念:一个库放在我的 public_html 文件夹中,它的目的是解码一个字符串。但是,如果该库不存在,则停止并出现错误。之前建议的方式是:
eval("require x.pm");
if ($@) {
print "The library is missing";
}
else{
BEGIN{
eval{"use x"};
}
1123131323fsdfsfsdfsfgdfgdfgghfghfghfgheterterter ...
no x;
}
如果库存在,解码工作正常,一切都是“Hunky Dory”。理论上......如果文件不存在,顶部循环应该打印一个错误......除了发生的所有事情是我得到一个错误 500,因为脚本看到了加密的字符串,并确定它不是一个有效的程序。
想知道是不是“$@”所以我用标志试了一下
$set=0;
$set=1 if eval("require x.pm");
if ($set eq 0){
...
..
同样的事情。尝试将代码放入字符串中:
$_="1123131323fsdfsfsdfsfgdfgdfgghfghfghfgheterterter ..."
这没有帮助。那么任何人都可以阐明我做错了什么吗?
【问题讨论】:
-
我不清楚您希望 perl 对
1123131323fsdfsfsdfsfgdfgdfgghfghfghfgheterterter ...做什么。不管加载了哪些模块,程序仍然需要编译。解码字符串涉及将编码的字符串传递给解码子程序。此外,BEGIN{ eval{"use x"}; }将在 编译时,在require之前完成,并且独立于您放入的条件语句 -
“如果库存在,则解码工作正常” 我无法想象您的模块
x中可能包含什么来编译该代码。no x不会做任何有用的事情,除非你的模块有unimport方法 -
这不是 Sobrique 和 bolav suggested 的方式,所以请不要声称它是。你读博拉夫的评论了吗? BEGIN 块将在编译时无条件执行,在其他任何事情之前。
-
我没有意识到这是一个后续问题。我注意到您说 “目前 - 除非被告知相反 - 我已经将这两个想法“混合”在一起。” 和 bolav replies “这是不可取的......”请注意您的建议。听起来所有这些都是为了让你的 Perl 代码不可读,这总是徒劳的,只会让你自己的工作更难