¿Cuándo deberíamos usar "use" y cuándo "require" y cuándo "AUTOLOAD" en perl
? Necesito una regla de pulgar para esto.¿Cuándo debería usar "use" y cuándo "require" y cuándo "AUTOLOAD" en perl [buena práctica de programación]?
Respuesta
use
es equivalente a BEGIN { require Module; Module->import(LIST); }
Por lo tanto, la diferencia principal es que:
uso se utiliza en tiempo de compilación
Uso llama automáticamente subrutina de importación (que pueden hacer nada pero se usa principalmente para exportar identificadores al espacio de nombres de la persona que llama)
uso muere si el módulo no puede ser cargado (falta/compilar error)
Como tal:
Cuando necesite cargar módulos dinámicamente (por ejemplo, determinar qué módulo para cargar basado en argumentos de línea de comando), use
require
.En general, cuando se necesita para controlar con precisión cuando se carga un módulo, utilice
require
(use
cargará el derecho módulo después del bloqueuse
oBEGIN
precedente, en tiempo de compilación).Cuando se necesita alguna manera de derivación llamando
import()
subrutina de módulo, utilicerequire
Cuando tenga que hacer algo inteligente en cuanto a errores de manipulación de carga (módulo, el módulo no puede compilar falta), se puede envolver el
require
en una declaracióneval { }
, por lo que todo el programa no solo muere.Puede simular eso con
use
pero de una manera más bien elegante (la señal de atrapamientodie
en un primer bloqueBEGIN
debería funcionar). Peroeval { require }
es mejor.En todos los demás casos, el uso
use
no escondí AUTOLOAD ya que es una bestia diferente. Su uso se da cuando desea interceptar llamadas a subrutinas que no ha importado a su espacio de nombres.
- 1. ¿Cuándo debería usar AUTOLOAD de Perl? En
- 2. ¿Cuándo debería usar require() y cuándo usar define()?
- 3. ¿Cuándo debería usar Import-Package y cuándo debería usar Require-Bundle?
- 4. Cuándo usar `require`,` load` o `autoload` en Ruby?
- 5. ¿Cuándo debería usar Silverlight y cuándo XNA?
- 6. ¿Cuándo debería usar TCP_NODELAY y cuándo TCP_CORK?
- 7. ¿Cuándo usar == y cuándo usarlo?
- 8. En SQL Server, ¿cuándo debería usar GO y cuándo debería usar punto y coma?
- 9. Cuándo usar Pepino y cuándo usar RSpec?
- 10. ¿Cuándo debería usar async/await y cuándo no?
- 11. ¿Cuándo debería usar doctrine ORM y cuándo zend-db-table?
- 12. ¿Cuándo debería usar IEnumerable y GetEnumerator?
- 13. ¿Cuándo debería usar paréntesis en las instrucciones require/include?
- 14. Cuándo usar categorías y cuándo usar subclases?
- 15. cuándo usar Tarea y cuándo usar Subproceso?
- 16. Cuándo usar undef_method, y cuándo usar remove_method?
- 17. En Objective-C, ¿cuándo debería usar métodos de clase y cuándo debería usar métodos de instancia?
- 18. Cuándo usar `zipmap` y cuándo` map vector`?
- 19. Cuándo usar GWT y cuándo no
- 20. ¿Cuándo debería usar stdClass y cuándo debería usar una matriz en php oo?
- 21. ¿Cuándo debería usar _aligned_malloc()?
- 22. ¿Cuándo y por qué debería usar TStringBuilder?
- 23. ¿Cuándo debería usar CompiledQuery?
- 24. ¿Cuándo debería usar remove_reference y add_reference?
- 25. ¿Cuándo debería usar std_logic_vector y cuándo debería usar otros tipos de datos?
- 26. ¿Cuándo debería usar semáforos?
- 27. ¿Cuándo debería usar ConcurrentSkipListMap?
- 28. ¿Cuándo debería usar GC.SuppressFinalize()?
- 29. Cuándo debería usar SynchronousQueue
- 30. Cuándo usar Restringir y cuándo no a
En resumen, generalmente quiere "usar". AUTOLOAD es para interceptar llamadas a métodos no definidos. – djsadinoff
del manual: * Si no desea llamar al método de "importación" del paquete (por ejemplo, para evitar que se altere su espacio de nombres), proporcione explícitamente la lista vacía: * 'use Module();' –
@ Hynek-Pichi -Vychodil: ¿la lista vacía omite llamar a 'import()' o simplemente llama a 'import()' con la lista vacía y, por lo tanto, no da como resultado las importaciones? – DVK