【问题标题】:Compile time and run time in PerlPerl 中的编译时间和运行时间
【发布时间】:2013-01-23 21:11:26
【问题描述】:

我正在阅读this document 以了解 Perl 程序的生命周期。

在这样的命令行上运行 Perl 脚本时,运行时间和编译时间事件何时发生:

perl my_script.pl

【问题讨论】:

  • 您有什么实际问题需要我们帮忙解决吗?
  • 考虑一个例子,假设我在 package/module.pm 中有一个包。我在我的 perl 脚本 my_script.pl 中调用了这个模块 foo() 的一个函数。现在如果我运行这个脚本perl my_script.pl COMPILERUN 事件是什么时候发生的?
  • perl 中没有编译步骤,它是一种解释型语言。解释器在运行时直接解析和运行你的 perl 代码。 http://en.wikipedia.org/wiki/Interpreter_(computing)
  • 你错了。 Perl 是编译的,而不是解释的。例如,执行perl -MO=Concise,-exec -e'print "$i\n" for 1..5;' 以查看该小程序的操作码。 (这些操作码然后由一个非常简单的虚拟机解释。)

标签: perl runtime compile-time


【解决方案1】:

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();

【讨论】:

    猜你喜欢
    • 2010-12-29
    • 2013-05-09
    • 1970-01-01
    • 1970-01-01
    • 2010-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-16
    相关资源
    最近更新 更多