r2 - 04 Mar 2006 - NelsonFerraz
NOME
strict - pragma para restringir construções insegurasSINOPSE
use strict;
use strict "vars";
use strict "refs";
use strict "subs";
use strict;
no strict "vars";
DESCRIÇÃO
Se nenhuma lista de importação for selecionada, todas as restrições possíveis são assumidas. (Este é o modo mais seguro de operação, mas às vezes é restrito demais para programação casual.) Atualmente, existem três possíveis coisas com as quais podemos ser estritos: ``subs'', ``vars'', and ``refs''.strict refs
- Esta opção gera um erro em tempo de execução se você
- usar referências simbólicas (veja the perlref manpage).
-
use strict 'refs'; -
$ref = \$foo; -
print $$ref; # ok -
$ref = "foo"; -
print $$ref; # runtime error; normally ok -
$file = "STDOUT"; -
print $file "Hi!"; # error; note: no comma after $file - Existe uma exceção para essa regra:
-
$bar = \&{'foo'}; -
&$bar; -
é permitido, para que
goto &$AUTOLOADnão deixe de funcionar sob use strict. strict vars
- Esta opção gera um erro em tempo de compilação se você acessar uma variável
-
que não fosse previamente declarada via
ourouuse vars, ou localizada -
via
my(), ou não estivesse totalmente qualificada. Como o objetivo disso é - evitar problemas de variáveis suicidas e questões de escopo dinâmico sutis, uma
-
mera variável
local()não é o suficiente. Veja my in the perlfunc manpage e local in the perlfunc manpage. -
use strict 'vars'; -
$X::foo = 1; # ok, fully qualified -
my $foo = 10; # ok, my() var -
local $foo = 9; # blows up -
package Cinna; -
our $bar; # Declares $bar in current package -
$bar = 'HgS'; # ok, global declared via pragma -
A função
local()gerou um erro de compilação porque você acabou tocando em - uma variável global sem qualificá-la totalmente.
- Por causa de seu uso especial na função sort(), as variáveis $a e $b estão
- isentas dessa verificação.
strict subs
- Esta opção desativa a ``otimização poética'', gerando um erro de compilação se
- você tentar usar um identificador bareword (sem prefixo $,%,@,&) que não seja
- uma subrotina, a não ser que seja um identificador simples (sem ``::'') e que ele
-
apareça entre chaves ou do lado esquerdo do símbolo
=>. -
use strict 'subs'; -
$SIG{PIPE} = Plumber; # blows up -
$SIG{PIPE} = "Plumber"; # just fine: quoted string is always ok -
$SIG{PIPE} = \&Plumber; # preferred form
HISTÓRIA
strict 'subs', em Perl 5.6.1, permitia erroneamente o uso de um identificador
composto (e.g. Foo::Bar) sem aspas como uma chave de hash (antes de
=> ou dentro de chaves), sem forçar que fosse uma string literal.
A partir de Perl 5.8.1, strict é estrito com relação a suas restrições: se alguma
restrição desconhecida for usada, a pragma strict vai abortar com
Unknown 'strict' tag(s) '...'
