2010-10-06 5 views
0

Y at-il de toute façon de dire à l'intérieur d'un de module de import {}Comment savoir si mon module Perl est inclus sous -M?

perl -MFoo -e1 

en dehors de

perl -e'use Foo;' 

et, de même

perl -e'package main; use Foo;' 

J'essaie d'avoir deux comportements distincts pour ces deux . Dans la syntaxe -MFoo, je veux le comportement de oose.pm, mais je ne veux pas avoir import appelé dans l'espace de noms main. Dans les autres syntaxes, je souhaite que la sous-importation se produise heureusement.

+1

Qu'est-ce que la pile d'appels ressemblent dans chacun de ces cas? – Ether

+0

Voilà, le haut est la ligne 0, le bas est la ligne 1, en faire une réponse et je vais accepter. –

Répondre

4

La pile d'appel est-elle différente dans chacun de ces cas? Il pourrait être aussi simple à jeter un coup d'œil à caller(0).

On dirait que la composante « ligne » est différente, au moins entre les cas 1 et 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, 
      '' 
     ]; 
Questions connexes