2013-04-13 8 views
5

Non sono sicuro se e che differenza fa se un inizio un modulo Perl conDevo usare "usa 5.12.0, usa gli avvisi;" in un modulo perl?

package MYPACKAGE; 
use 5.12.0; 
use warnings; 

# functions are here 

1; 

o

use 5.12.0; 
use warnings; 
package MYPACKAGE; 

# functions are here 

1; 

o se questi use ... non sono considerate affatto perché il use ... sono ereditarie dallo script perl chiamante.

La domanda probabilmente si riduce a: vale la pena di specificare quelli use ... in un modulo o è sufficiente se li ho specificati nel mio script perl.

risposta

7

I moduli pragmatici hanno un ambito lessicale non dinamico.

La versione di pragma attiva alcune funzioni nell'ambito corrente, a seconda della versione. Non attiva queste funzionalità a livello globale. Questo è importante per la retrocompatibilità.

Ciò significa che una pragma può essere attivato al di fuori della definizione di modulo, ma all'interno della nostra portata:

# this is package main 
use 5.012; # activates `say` 
package Foo; 
say "Hi"; # works, because lexical scope 

Questo è diverso da importazioni normali importati nel package corrente (= portata!).

Il pragma warnings attiva gli avvisi all'interno dell'ambito corrente.

Tuttavia, ogni file deve contenere lo use strict, in quanto lo scope lessicale non si estende mai sui file. Pragma non sono transitiva:

Foo.pm:

say "Hi"; 
1; 

main.pl:

use 5.012; 
require Foo; 

fallisce.


Dove esattamente si mettono questi pragma è quindi in gran parte irrilevante. Ti consigliamo di inserire il pragma prima dello package quando nel file sono presenti più spazi dei nomi, ad es.

use 5.012; use warnings; 

package Foo; 
...; 
package Bar; 
...; 
1; 

ma per mettere la prima package se è l'unico nel file.

package Foo; 
use 5.012; use warnings; 
...; 
1; 

L'unica cosa importante è che si fa use li ;-)

+0

E 'possibile per un modulo da usare [ 'strict'] (http://perldoc.perl.org/strict.html "perldoc strict") e ['warnings'] (http://perldoc.perl.org/warnings.html" perldoc warnings ") per tuo conto. 'esempio di pacchetto; usare rigorosamente; sub import {strict-> import} 'Esempio: [Modern :: Perl] (http://p3rl.org/Modern::Perl" perldoc Modern :: Perl ") –

Problemi correlati