Si olvida el 1 al final de un paquete, Perl le dice "El paquete no devolvió un valor verdadero". Bueno, si sabe que lo olvidaste, ¿por qué no lo dejaste allí para ti?¿Por qué el 1 al final de cada paquete de Perl?
Respuesta
Porque los módulos Perl deben devolver un valor para indicar si la directiva require
debe tener éxito (se devuelve el valor verdadero) o no (se devuelve el valor falso; esto puede tener sentido si el módulo no se inicializa por algún motivo).
Si no devuelve nada, el intérprete no puede saber si el require
debe tener éxito o no; al mismo tiempo, dado que es fácil olvidarse de poner el valor verdadero al final del paquete, sugiere la "solución común" para este error: agregue un valor verdadero como retorno.
Para alguna otra información/folclore sobre el valor de retorno de los módulos, échele un vistazo a this question.
Si se olvidó de ponerlo allí, ¿no significaría que probablemente no necesitó señalizar ningún tipo de inicialización fallida? Dado que parece que sería un caso muy especializado, ¿no podemos asumir con seguridad que tendrá éxito a menos que le estemos diciendo que existe la posibilidad de que no tenga éxito? –
@Chris: podemos discutir sobre lo que sería mejor o más lógico, pero el lenguaje ha sido diseñado de esta manera, hablar de eso no cambiará este comportamiento. ':)' (Personalmente, creo que es mejor así ahora: si se solicita un valor de retorno, entonces * tiene * que especificarlo) –
@Matteo - Desde Perl 6 todavía mucho en la etapa de "futuro indefinido" de desarrollo, creo que hablando sobre el lenguaje _can_ (y casi seguramente lo hará) cambiará su comportamiento. –
Un paquete puede devolver un valor falso si no se inicializa, por ejemplo, si no pudo encontrar un archivo de datos requerido o una biblioteca externa. De esta forma, falla limpiamente en el momento de la carga (y esta falla incluso puede ser probada) en lugar de impredeciblemente más tarde.
Un paquete * puede * devolver un valor falso si no se inicializa, pero no debería. Sería mejor morir con un mensaje útil. – ikegami
1;
When a module is loaded (via use) the compiler will complain unless the last statement executed when it is loaded is true. This line ensures that this is the case (as long as you don't place any code after this line). It's Perl's way of making sure that it successfully parsed all the way to the end of the file.
Ver http://mathforum.org/~ken/perl_modules.html
Se puede utilizar cualquier declaración que se evalúa como verdadera. 1 acaba de pasar a convertirse en un idioma perl.
A Perl module must end with a true value or else it is considered not to
have loaded. By convention this value is usually 1 though it can be
any true value. A module can end with false to indicate failure but
this is rarely used and it would instead die() (exit with an error).
- 1. ¿Por qué mi loop de Perl está apagado al final?
- 2. ¿Por qué tiene que poner un 1; al final de un módulo Perl 5?
- 3. Perl: ¿Por qué no eval '/(...)/' establece $ 1?
- 4. ¿Qué significa "1" al final de una declaración php print_r?
- 5. C++: Cada vez que leo por fstream obtengo 1 carácter extra al final
- 6. SQL Server: ¿Por qué debería agregar "; 1" al final de un nombre de procedimiento almacenado?
- 7. Al añadir caracteres al final de cada línea en Emacs
- 8. ¿Por qué el rango (inicio, final) no incluye el final?
- 9. Signo de dólar al final de cada línea
- 10. ¿Qué significa $ 1 en Perl?
- 11. LINQPad añade una S al final de cada mesa
- 12. ¿Por qué Perl reemplaza mi cadena con "1"?
- 13. ¿Qué significa "1"? significa en Perl?
- 14. Agregue una coma al final de cada línea usando php
- 15. ¿Por qué esta vista de rieles escupe una matriz en bruto al final de un bucle cada do?
- 16. Gdata tema paquete perl
- 17. ¿Por qué necesitaría una barra al final de una URL?
- 18. ¿Por qué mi CGI de Perl se queja de "encabezados de final prematuro de scripts"?
- 19. Perl punto y coma al final de la instrucción
- 20. Perl, incluir dinámicamente el paquete
- 21. (-1 >> 1) == -1 - ¿Por qué?
- 22. Archivo por lotes para agregar caracteres al principio y al final de cada línea en el archivo txt
- 23. ¿Por qué es el código de salida 255 en lugar de -1 en Perl?
- 24. ¿Cómo agregar texto al final de cada línea en Vim?
- 25. Perl - Paquete Temas/Módulo
- 26. Perl cambiando el paquete actual?
- 27. Dile al final de un bucle .Cada en rubí
- 28. hormiga: ejecutar un objetivo al final de cada compilación
- 29. por qué autoimport solo el paquete java.lang?
- 30. ¿Por qué el movimiento de regreso al final de la función es menos eficiente?
¿Quieres [verdadero] (http://p3rl.org/true). – daxim