2009-10-02 4 views
7

私はまだPerlを初めて使っています。コンパイル中にBEGINブロックが実行されているため、単純にコンパイルしてもウイルスの拡散やデータの消失は起こりませんか? Perlはそれを止める何かをしますか?そうであれば、ブロックはBEGINブロックのコードがその外側で異なる動作をする可能性がありますか?Perl BEGINブロックがウイルスを広げたり、データを失うことはありますか?

答えて

13

これらの質問すべてに該当します。 Eclipse IDEはこれに脆弱でした。それはdiscussed in more detail hereです。

すべてのソフトウェアと同様に、信頼できないソースからは何もダウンロードして実行しないでください。 CPANは一般的に信頼できるものです。私は意図的に不正なコードをCPANに公開している人は誰も知らないが、起こっている可能性がある。

あなたは:例えば、$^C flagと、コンパイル時にチェックコードを実行し、時にはこれが機能です

BEGIN { load_data_from_db() unless $^C; } 
+2

「$^C」に関する優れた点。 http://perldoc.perl.org/perlvar.html#$^C – daotoad

+0

@daotoadあなたのリンクが壊れていたので、私は応答を編集して作業中のものを含むようにしました。 – Ether

1

注意を避けることができます。 mod_perlモジュール内のBEGINブロックは、最初にロードされるときに一度だけ実行されます。つまり、同じスクリプトでページレベルの初期化を行う簡単な構文があり、それがアシストするコードの「近く」に配置します。

場合によっては、スクリプトの先頭に配置したくない複雑な初期化コードを書く場合にも同様に便利です。

しかし、主にawkとの主題互換性のためだけにあります。

+1

awkのように見えるだけではありません。 BEGINブロックは、シーケンス処理のために非常に便利です。 –

+0

それはまさに私が言ったことではありませんか?あなたが選ぶことにした文章の前にかなりのテキストがありました。 –

+1

@Andy - あなたは "ほとんど"と言いました。何年にもわたるPerlソフトウェアの開発では、BEGINブロックをいくつかの理由で使用していましたが、これまでのところ、awkとの主題互換性を見たことはありません。 – DVK

関連する問題