2010-10-06 48 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, 
      '' 
     ]; 
相關問題