Quando devemos usar "use" e quando "require" e quando "AUTOLOAD" no perl
? Eu preciso de uma regra para isso.
Respostas:
16 para resposta № 1use
é equivalente a BEGIN { require Module; Module->import( LIST ); }
Então, a principal diferença é que:
O uso é usado em tempo de compilação
Use automaticamente chama sub-rotina de importação (o que pode fazer qualquer coisa mas principalmente usado para exportar identificadores no namespace do chamador
use morre se o módulo não puder ser carregado (erro de falta / compilação)
Assim sendo:
Quando você precisar carregar módulos dinamicamente (por exemplo, determinar qual módulo carregar com base nos argumentos da linha de comando), use
require
.Em geral, quando você precisa controlar com precisão quando um módulo é carregado, use
require
(use
irá carregar o módulo logo após o anterioruse
ouBEGIN
quadra, em tempo de compilação).Quando você precisa, de alguma forma, ignorar o módulo de chamada "s
import()
sub-rotina, userequire
Quando você precisa fazer algo inteligente na medida em que lidar com erros de carga (módulo ausente, módulo não pode compilar), você pode
require
em umeval { }
declaração, por isso todo o programa não apenas morre.Você pode simular isso com
use
mas de maneiras bastante elegantes (trappingdie
sinal em um inícioBEGIN
bloco deve funcionar). Maseval { require }
é melhor.Em todos os outros casos, use
use
Eu não cobri AUTOLOAD como aquele é um beastie diferente. Seu uso é nos casos em que você deseja interceder chamadas para sub-rotinas que você não importou para o seu namespace.