/ / Quando deve usar “use” e quando “require” e quando “AUTOLOAD” em perl [boa prática de programação]? - perl

Quando deve usar “use” e quando “require” e quando “AUTOLOAD” em perl [boa prática de programação]? - perl

Quando devemos usar "use" e quando "require" e quando "AUTOLOAD" no perl ? Eu preciso de uma regra para isso.

Respostas:

16 para resposta № 1

use é 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 anterior use ou BEGIN quadra, em tempo de compilação).

  • Quando você precisa, de alguma forma, ignorar o módulo de chamada "s import() sub-rotina, use require

  • 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 um eval { } declaração, por isso todo o programa não apenas morre.

    Você pode simular isso com use mas de maneiras bastante elegantes (trapping die sinal em um início BEGIN bloco deve funcionar). Mas eval { 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.