2010-10-06 80 views
0

反正从模块import {}我怎么知道我的Perl模块是否包含在-M下?

perl -MFoo -e1 

除了里面分辨

perl -e'use Foo;' 

,同样

perl -e'package main; use Foo;' 

我想有这两个两种不同的行为。在-MFoo语法中,我想要oose.pm的行为,但我不想在main命名空间中调用import。在其他语法中,我希望子导入很高兴地发生。

+1

是什么调用堆栈看起来就像在每一种情况下? – Ether 2010-10-06 17:25:16

+0

就是这样,顶部是第0行,底部是第1行,让它成为答案,我会接受。 – 2010-10-06 17:36:03

回答

4

每种情况下的调用堆栈都不同吗?在偷看caller(0)时可能很简单。

看起来像“线”成分是不同的,情况#1和#2至少之间:

package Foo; 
use strict; 
use warnings; 
use Data::Dumper; 
sub import 
{ 
    print Dumper([caller(0)]); 
} 
1; 

# perl -MFoo -e1 
$VAR1 = [ 
      'main', 
      '-e', 
      0, 
      'Foo::import', 
      1, 
      0, 
      undef, 
      undef, 
      0, 
      '' 
     ]; 

# perl -e'use Foo' 
$VAR1 = [ 
      'main', 
      '-e', 
      1, 
      'Foo::import', 
      1, 
      0, 
      undef, 
      undef, 
      0, 
      '' 
     ]; 

# perl -e'package main; use Foo;' 
$VAR1 = [ 
      'main', 
      '-e', 
      1, 
      'Foo::import', 
      1, 
      0, 
      undef, 
      undef, 
      0, 
      '' 
     ]; 
相关问题