Как я могу квалифицировать переменную как const / final в Perl? - PullRequest
8 голосов
/ 03 ноября 2010

Например, в ситуациях, подобных приведенным ниже, я не хочу изменять значение $infilename где-либо в программе после инициализации.

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

...
print "$infilename has $result matches\n";

close $fpin;

Какой правильный способ убедиться, что любое изменениев $infilename приводит не только к предупреждению, но и к ошибкам?

Ответы [ 3 ]

9 голосов
/ 03 ноября 2010
use Readonly;
Readonly my $infilename => "input_56_12.txt";

Или с использованием более нового Const :: Fast модуля:

use Const::Fast;
const my $infilename => "input_56_12.txt";
8 голосов
/ 03 ноября 2010
use constant INPUT_FILE => "input_56_12.txt";

Может быть, что вы хотите.Если вам нужно инициализировать что-то, что может измениться во время выполнения, вам может не повезти, я не знаю, поддерживает ли это Perl.

РЕДАКТИРОВАТЬ: О, посмотрите на ответ Евгения У, Perlподдержать это.

4 голосов
/ 03 ноября 2010

Другой популярный способ создания скаляров только для чтения - изменение записи в таблице символов для переменной с помощью typeglob:

*infilename = \"input_56_12.txt";

Это работает только для глобальных переменных (переменные "my" не имеют записи в таблице символов).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...