Moduły pragmatyczne mają leksykalny, a nie dynamiczny zakres.
Wersja pragma aktywuje niektóre funkcje w bieżącym zakresie, w zależności od wersji. Nie aktywuje tych funkcji na całym świecie. Jest to ważne ze względu na kompatybilność wsteczną.
To oznacza, że mogą być aktywowane Pragma poza definicji modułu, ale w środku naszego zakresie:
# this is package main
use 5.012; # activates `say`
package Foo;
say "Hi"; # works, because lexical scope
ta różni się od normalnych importu, które są importowane do bieżącego pakietu (= zasięg!).
Pragma warnings
aktywuje ostrzeżenia w bieżącym zakresie.
Jednak każdy plik powinien zawierać use strict
, ponieważ zakres leksykalny nigdy nie rozciąga się na pliki. Pragma nie są przechodnie:
Foo.pm:
say "Hi";
1;
main.pl:
use 5.012;
require Foo;
zawiedzie.
Gdzie dokładnie umieścić te pragma jest więc w dużej mierze bez znaczenia. Zalecam umieszczenie pragmy przed package
, gdy w pliku znajduje się wiele przestrzeni nazw, np.
use 5.012; use warnings;
package Foo;
...;
package Bar;
...;
1;
ale najpierw wstawić package
, jeśli jest jedyną w pliku.
package Foo;
use 5.012; use warnings;
...;
1;
Jedyną ważną rzeczą jest to, że robisz use
je ;-)
Możliwe jest moduł do korzystania [ 'strict'] (http://perldoc.perl.org/strict.html "perldoc strict") i ["ostrzeżenia"] (http://perldoc.perl.org/warnings.html "perldoc warnings") w twoim imieniu. 'przykład pakietu; używaj ścisłego; sub import {strict-> import} 'Przykład: [Modern :: Perl] (http://p3rl.org/Modern::Perl" perldoc Modern :: Perl ") –