2016-04-08 13 views
-1

概念:ライブラリは私のpublic_htmlフォルダに置かれ、文字列をデコードする目的です。しかし、そのライブラリが存在しない場合は、エラーで停止してください。前でした提案された方法:終了perl pmが利用できない場合

eval("require x.pm"); 

if ([email protected]) { 
    print "The library is missing"; 
} 
else{ 

    BEGIN{ 
     eval{"use x"}; 
    } 

    1123131323fsdfsfsdfsfgdfgdfgghfghfghfgheterterter ... 
    no x; 
} 

ライブラリが存在する場合、デコードが正常に動作し、すべてが「互角のドーリー」です。理論上...ファイルが存在しない場合、トップループはエラーを出力するはずです...スクリプトが暗号化された文字列を見て、それが有効なプログラムではないと判断すると、エラー500が発生します。私は、フラグ

$set=0; 
$set=1 if eval("require x.pm"); 

if ($set eq 0){ 
... 
.. 

同じことでそれを試してみましたので、それは "$ @を" だったのか疑問に思っ

。文字列にコードを入れようとしました:

$_="1123131323fsdfsfsdfsfgdfgdfgghfghfghfgheterterter ..." 

これは役に立ちませんでした。だから誰も私が間違っていることにどのような光を投げることができますか?

+0

私はあなたが '1123131323fsdfsfsdfsfgdfgdfgghfghfghfgheterterterで行うことがperlの期待は明らかではありませんよ...'。どのモジュールがロードされているかにかかわらず、プログラムはまだコンパイルする必要があります。文字列をデコードするには、エンコードされた文字列をデコードサブルーチンに渡す必要があります。また、 'BEGIN {eval {" use x "}; } 'は' require 'の前に*コンパイル時*に実行され、条件文とは無関係に – Borodin

+0

に入れます* "ライブラリが存在する場合、デコードはうまく動作します" *何があるかも想像できませんあなたのモジュール 'x'でそのコードをコンパイルするようにしてください。あなたのモジュールが 'unimport'メソッドを持っていない限り、' no x'は役に立たないでしょう – Borodin

+1

それはSobriqueとbolav [提案](http://stackoverflow.com/a/35651339)なのではありません。そうではないと主張してください。 bolavさんのコメントはありませんか? BEGINブロックはコンパイル時に無条件で実行されます。 – ThisSuitIsBlackNot

答えて

-1

どのような方法でも終了しないようです。 eval()を使用して、あなたが望むことを行うための安定した方法は、exit()です。 require()が失敗した場合、$okは真の値に設定されません。

my $ok = eval {require 'nofile.pm'; 1}; 

if (! $ok){ 
    print "module not found\n"; 
    exit; 
} 
+0

申し訳ありませんが、私の急いで入力すると、 "ライブラリがありません"ライン – Cristofayre

+0

いいえ、申し訳ありません...まだ行きません。 ../program_name.cgi 22行目の構文エラー "1123131323fsdfs ..."のようになります。 行24の式で「いいえ」が許可されていません。つまり、プログラムを見ていて、変数、および終了します。ライブラリISは存在していても、ぐらついたり、値をデコードしたりすることはありません!!奇妙な – Cristofayre

+0

最初の例はPerlでもありません。あなたの2番目の例で '$ _'に代入するのは標準的ではありません。スクリプトの先頭に' use warnings; 'と' use strict; 'を入れてください。 – stevieb

関連する問題