La pratique Standard consiste à utiliser use
la plupart du temps, require
de temps en temps, do
rarement.
do 'file'
execute file
comme un script Perl. C'est presque comme appelant eval
sur le contenu du fichier; si vous do
plusieurs fois le même fichier (par exemple, dans une boucle), il sera analysé et évalué chaque fois ce qui est peu probable d'être ce que vous voulez. La différence entre do
et eval
que do
ne pouvez pas voir les variables lexicales dans le cadre englobant, qui le rend plus sûr. do
est parfois utile pour des tâches simples comme le traitement d'un fichier de configuration qui est écrit dans la forme de code Perl.
require 'file'
, c'est comme do 'file'
, sauf qu'elle ne fait qu'analyser n'importe quel fichier particulier à un moment et va lever une exception si quelque chose va mal. (par exemple, le fichier ne peut être trouvé, il contient une erreur de syntaxe, etc.) La vérification automatique des erreurs en fait un bon remplacement pour do 'file'
, mais il est encore seulement adapté pour les mêmes gestes simples.
L' do 'file'
et require 'file'
des formes sont des reports de jours passé lorsque l' *.pl extension de fichier signifie "Bibliothèque Perl." La façon moderne de la réutilisation de code en Perl est de les organiser dans des modules. L'appel de quelque chose d'un "module" au lieu de "bibliothèque" est juste de la sémantique, mais le sens des mots distinctement des choses différentes en Perl culture. Une bibliothèque est juste une collection de routines; un module dispose d'un espace de noms, ce qui rend beaucoup plus approprié pour les réutiliser.
use Module
c'est la manière normale de l'aide de code à partir d'un module. Notez que Module
est le nom du package de mot nu et pas une chaîne contenant un nom de fichier. Perl gère la traduction à partir d'un nom de package à un nom de fichier pour vous. use
états se produire au moment de la compilation et de lever une exception en cas de défaillance. Cela signifie que si un module de votre dépend le code n'est pas disponible ou ne parvient pas à charger l'erreur est immédiatement perceptible. En outre, use
appelle automatiquement l' import()
méthode du module si il en a un qui peut vous faire économiser un peu de frappe.
require Module
, c'est comme use Module
, sauf que cela se passe au moment de l'exécution et n'appelle pas automatiquement le module import()
méthode. Normalement, vous souhaitez utiliser use
à l'échec tôt et de manière prévisible, mais parfois, require
, c'est mieux. Par exemple, require
peut être utilisé pour retarder le chargement de gros modules qui ne sont, à l'occasion, ou pour faire un module optionnel. (c'est à dire utiliser le module, s'il est disponible, mais retomber sur quelque chose d'autre ou de réduire fonctionnalité si elle ne l'est pas.)
Strictement parlant, la seule différence entre require Module
et require 'file'
, c'est que la première forme déclencheurs de la traduction automatique à partir d'un nom de package comme Foo::Bar
d'un nom de fichier comme Foo/Bar.pm
alors que la dernière forme s'attend à un nom de fichier pour commencer. Par convention, si, la première forme est utilisée pour le chargement des modules, tandis que la deuxième forme est utilisé pour le chargement des bibliothèques.