2009-07-21 8 views
27

Quelle est la différence entre faire use My::Module et require My::Module?En Perl, quelle est la différence entre l'utilisation et le besoin de charger un module?

+2

@Ether: mais c'est le m. L'un d'entre eux, de toute façon. – ysth

+7

Cela peut être facile à comprendre par vous-même, mais c'est certainement une très bonne question Perl que les débutants sont enclins à poser. Je ne vois pas pourquoi ça ne devrait pas être sur stackoverflow. Où est le mal? – innaM

Répondre

30

La fonction use:

use ModuleName; 

est équivalent au code suivant à l'aide de la fonction require:

BEGIN { 
    require ModuleName; 
    ModuleName->import; 
} 

Le bloc BEGIN provoque ce code à exécuter dès que l'analyseur voit. Le require charge le module ou die en cours d'essai. Et puis la fonction import du module est appelée. La fonction import peut faire toutes sortes de choses, mais il est courant de charger des fonctions dans l'espace de noms use d (souvent avec le module Exporter).

Il est important de noter que les importations ne seront pas appelés dans ce cas:

use ModuleName(); 

Dans ce cas, il est équivalent à

BEGIN { 
    require ModuleName; 
} 
+1

La page de manuel dit que c'est * exactement * équivalent :) – Inshallah

+1

@Inshalla J'aime laisser une petite marge de manœuvre pour ma mémoire défectueuse. –

3

use s'exécute au moment de la compilation et require s'exécute au moment de l'exécution.

+3

N'oubliez pas l'appel de 'import'. –

+2

C'est la réponse qu'ils recherchent sur les tests Perl et les entretiens d'embauche. Vous devez mémoriser cela! – Hawk

10

Perl est fourni avec une grande documentation. Tout le monde aurait avantage à lire l'ensemble de la documentation au moins une fois tous les quelques mois.

C:\>perldoc -f require

Sinon require exige qu'un fichier de bibliothèque être inclus si elle n'a pas déjà été inclus. Le fichier est inclus via le mécanisme DO-FILE , qui est essentiellement juste une variété d'eval avec la mise en garde que les variables lexicales dans le script appelant seront invisible au code inclus. A sémantique similaire à la procédure suivante:

... etc.De même,

C:\>perldoc -f use

Importe une sémantique dans le package courant à partir du module nommé, généralement par aliasing certains sous-programme ou les noms de variables dans votre package . Il est exactement équivalent à

BEGIN { require Module; Module->import(LIST); } 

sauf que le module doit être un mot seul.

... etc

Il y a aussi la perlfaq entry même si je pense qu'il est moins instructif que ce qui précède.

+1

En plus de la merveilleuse commande perldoc, vous pouvez accéder à toute la documentation via http://perldoc.perl.org –

+0

Ah. Vos tags kbd rendent plus difficile de dire ce qu'est un lien (ainsi que le rendu pas très joliment). – ysth

Questions connexes