2010-10-06 3 views
0

Есть ли вообще сказать, изнутри модуля import {}Как узнать, включен ли мой модуль Perl под -M?

perl -MFoo -e1 

кроме

perl -e'use Foo;' 

и, аналогично

perl -e'package main; use Foo;' 

Я пытаюсь иметь два различных поведения для этих двух , В синтаксисе -MFoo я хочу поведение oose.pm, но я не хочу, чтобы import вызывал в пространстве имен main. В других синтаксисах я хочу, чтобы вспомогательный импорт был счастлив.

+1

Что стек вызовов выглядеть в каждом из этих случаев? – Ether

+0

Вот и все, верхняя строка - линия 0, внизу строка 1, сделайте это ответом, и я соглашусь. –

ответ

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, 
      '' 
     ]; 
Смежные вопросы