2011-03-13 10 views

Respuesta

34

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.

+0

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? –

+3

@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) –

+1

@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. –

4

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.

+0

Un paquete * puede * devolver un valor falso si no se inicializa, pero no debería. Sería mejor morir con un mensaje útil. – ikegami

2

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.

3

De wikipedia Perl module:

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). 
Cuestiones relacionadas