2013-02-08 115 views
4

我正在閱讀this文檔以瞭解Perl程序的生命週期。perl編譯時間和運行時間

我無法弄清楚當RUN時間和時COMPILE時間這樣的活動在命令行上運行的Perl腳本而發生:

perl my_script.pl 
+2

你有一個實際的問題,我們可以幫助? – ysth

+0

考慮一個例子,假設我在package/module.pm中有一個包。我在我的perl腳本'my_script.pl'中調用了這個模塊的'foo()'函數。現在,如果我在** COMPILE **和** RUN **事件發生時運行此腳本'perl my_script.pl', –

+0

perl中沒有編譯步驟,它是一種解釋型語言。解釋器在運行時直接解析並運行您的Perl代碼。 [http://en.wikipedia.org/wiki/Interpreter_(computing)](http://en.wikipedia.org/wiki/Interpreter_%28computing%29) –

回答

13

perl script.pl將編譯script.pl然後執行script.pl。同樣,require Module;將編譯Module.pm,然後執行Module.pm

如果編譯器遇到一個BEGIN塊,它將在塊編譯後立即執行該塊。請記住,use是一個BEGIN塊,由require和可能的import組成。

例如,

# script.pl 
use Foo; 
my $foo = Foo->new(); 
$foo->do(); 

是否:

  1. 編譯script.pl
    1. 編譯use Foo;
    2. 執行require Foo;
      1. 編譯Foo.pm
        1. ...
      2. 執行Foo.pm
        1. ...
    3. 執行import Foo;
    4. 編譯my $foo = Foo->new();
    5. 編譯$foo->do();
  2. 執行script.pl
    1. 執行my $foo = Foo->new();
    2. 執行$foo->do();