Comment puis-je qualifier une variable comme const/final en Perl?

par exemple, dans les situations comme ci-dessous, je ne veux pas changer la valeur de $infilename n'importe où dans le programme après l'initialisation.

my $infilename = "input_56_12.txt";
open my $fpin, '<', $infilename
    or die $!;

...
print "$infilename has $result matchesn";

close $fpin;

Quelle est la bonne façon de s'assurer que tout changement dans $infilename n'entraîne pas seulement des avertissements, mais aussi des erreurs?

8
demandé sur Lazer 2010-11-03 21:38:24

3 réponses

use Readonly;
Readonly my $infilename => "input_56_12.txt";

ou en utilisant le nouveau Const:: Fast module:

use Const::Fast;
const my $infilename => "input_56_12.txt";
8
répondu Eugene Yarmash 2010-11-04 14:20:42
use constant INPUT_FILE => "input_56_12.txt";

Peut-être ce que vous voulez. Si vous avez besoin de l'initialiser à quelque chose qui peut changer au temps d'exécution alors vous pourriez être sans chance, Je ne sais pas si Perl soutient cela.

EDIT: Oh, regarde eugène y répondre, Perl prend en charge.

8
répondu Peter C 2010-11-03 18:47:18

une autre façon populaire de créer des scalaires en lecture seule est de modifier l'entrée de la table de symboles pour la variable en utilisant un typeglob:

*infilename = \"input_56_12.txt";

Cela ne fonctionne que pour les variables globales ("mon", les variables n'ont pas de symbole d'entrée de la table).

4
répondu Eugene Yarmash 2010-11-04 14:15:54