Perl环境设置无效
Perl环境设置无效,perl,Perl,Test::Mojo包导入Mojo::UserAgent模块: package A; $ENV{MOJO_USERAGENT_DEBUG} =1; use Test::Mojo; use utf8; .... ; 1; package B; BEGIN{ $ENV{MOJO_USERAGENT_DEBUG =1 } }; use Test::Mojo; use utf8; ... ; 1; 为什么程序包A中的代码无法打开调试。但是包B可以?因为Test::Mojo在加载变量时检查变量,所以需
Test::Mojo
包导入Mojo::UserAgent
模块:
package A;
$ENV{MOJO_USERAGENT_DEBUG} =1;
use Test::Mojo;
use utf8;
....
;
1;
package B;
BEGIN{ $ENV{MOJO_USERAGENT_DEBUG =1 } };
use Test::Mojo;
use utf8;
...
;
1;
为什么程序包A中的代码无法打开调试。但是包B可以?因为Test::Mojo在加载变量时检查变量,所以需要在加载之前设置环境。因为Test::Mojo在加载变量时检查变量,所以需要在加载之前设置环境
package Test::Mojo;
...
use Mojo::UserAgent;
...
1;
这应该很清楚;-)
换句话说:BEGIN块和“use”语句将在同一编译步骤中按照它们出现的顺序进行计算。在这两个示例中,BEGIN和“use”是互换的,因此在一个示例中,BEGIN块在“usetest::Mojo”之后执行。我的猜测是Test::Mojo在编译时评估env var。如果它能够在运行时对其进行评估,那么它应该可以工作
更多细节
这应该很清楚;-)
换句话说:BEGIN块和“use”语句将在同一编译步骤中按照它们出现的顺序进行计算。在这两个示例中,BEGIN和“use”是互换的,因此在一个示例中,BEGIN块在“usetest::Mojo”之后执行。我的猜测是Test::Mojo在编译时评估env var。如果它能够在运行时对其进行评估,那么它应该可以工作
更多细节 我不确定你说的是真话,因为B有语法错误,它很可能不会打开任何特定的内容。我不确定你说的是真话,因为B有语法错误,它很可能不会打开任何特定的内容。
#!/usr/bin/env perl
# vim:set shiftwidth=4 tabstop=4 expandtab ai smartindent fileformat=unix fileencoding=utf-8 syntax=perl:
# http://perldoc.perl.org/perlmod.html#BEGIN,-UNITCHECK,-CHECK,-INIT-and-END
package init;
{ print "10. Ordinary code runs at runtime.\n"; }
END { print "16. So this is the end of the tale.\n" }
INIT { print " 7. INIT blocks run FIFO just before runtime.\n" }
UNITCHECK { print " 4. And therefore before any CHECK blocks.\n" }
CHECK { print " 6. So this is the sixth line.\n" }
{ print "11. It runs in order, of course.\n"; }
BEGIN { print " 1. BEGIN blocks run FIFO during compilation.\n" }
END { print "15. Read perlmod for the rest of the story.\n" }
CHECK { print " 5. CHECK blocks run LIFO after all compilation.\n" }
INIT { print " 8. Run this again, using Perl's -c switch.\n" }
{ print "12. This is anti-obfuscated code.\n"; }
END { print "14. END blocks run LIFO at quitting time.\n" }
BEGIN { print " 2. So this line comes out second.\n" }
UNITCHECK { print " 3. UNITCHECK blocks run LIFO after each file is compiled.\n" }
INIT { print " 9. You'll see the difference right away.\n" }
{ print "13. It merely _looks_ like it should be confusing.\n"; }
sub import {
print "IMPORT\n";
}
1;