Perl Brasil

Pesquisar

Documentação

Artigos

Planeta

Eventos

Comunidade

r2 - 04 Mar 2006 - NelsonFerraz


NOME

strict - pragma para restringir construções inseguras

voltar para o topo


SINOPSE

    use strict;
    use strict "vars";
    use strict "refs";
    use strict "subs";
    use strict;
    no strict "vars";

voltar para o topo


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 &$AUTOLOAD nã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 our ou use 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
Veja Pragmatic Modules in the perlmodlib manpage.

voltar para o topo


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) '...'

voltar para o topo


TRADUÇÃO

Nelson Ferraz <nferraz@gmail.com>

voltar para o topo