Constantes em Perl

Hoje vou falar sobre um tópico bastante simples que surgiu em uma apresentação de Perl que fiz na Computer Science House @ RIT.

Constantes

Constantes são um recurso muito antigo no Perl e também um recurso muito útil. O constantpragma embutido em Perl permite que você crie constantes em tempo de compilação. É usado assim

use constant NAME => 'William Orr';

Isso cria uma constante chamada NAME, que pode ser usada assim:

say NAME;

O que diabos é uma constante?

Constantes, como você pode notar, não têm nenhum tipo de sigilo precedente. Isso ocorre porque, na verdade, as constantes são implementadas como funções que retornam o valor pré-declarado.

Isso explica algumas coisas, como constantes só podem ser escalares ou listas, não arrays ou hashes.

Também é importante notar que o pragma constante impõe um contexto de lista em seus argumentos. Algo como

use constant CURRENT_TIME => localtime();

provavelmente não fará o que você deseja (ou seja, fornecerá uma string da hora atual).

Além disso, se você tentar usar a constante acima, poderá encontrar erros ao tentar indexá-la.

say CURRENT_TIME[0] #this doesn't do what you want
say
(CURRENT_TIME)[0] # this, however, does

Isso ocorre porque CURRENT_TIMEé uma lista, não uma matriz.

Mas Will, eu quero interpolação!

Legal, eu também. Vamos falar sobre interpolação.

use Const::Fast;
const my $NAME => 'William Orr';
say
"My name is $NAME";

Const::Fasté um módulo fantástico que dá a você a habilidade de criar constantes rapidamente sem os problemas que use constanto stdlib Readonlyapresenta.

Resumo

Constantes são úteis e Const::Fastsão a melhor e mais fácil maneira de fazer e usar constantes. Caso contrário, o constantpragma embutido funciona brilhantemente.