Как я могу определить константы в отдельном файле в Perl?

Посмотрите, я не прочитал ссылки, которые Вы отправили.

Однако вот мое понимание.
Каждая программа содержит некоторое знание, он - данные (состояние), которое может изменить любого изменениями ввода данных пользователем / внешними изменениями и т.д.

Переменные (значения, которые изменяются), сведены, поддерживают состояние. Неизменный означает некоторые данные, которые не изменяются. Можно сказать, это - то же как только для чтения или постоянное в некотором роде (это видно он тот путь).

AFAIK, функциональное программирование имеет неизменные вещи (т.е. Вы не можете использовать присвоение на переменную, содержащую значение. То, что можно сделать, создают другую переменную, которая может содержать исходное значение + изменения).

.NET имеет строковый класс, который является примером.
т.е. Вы не можете изменить строку в ее месте

строка s = "привет"; я могу записать s. Замена ("el", "a"); Но это не изменит содержание переменной s.

то, Что я могу сделать, является s = s. Замена ("el", "a");
Это создаст новую переменную & присвойте его значение s (перезаписывающий содержание s).

Эксперты могут исправить ошибки, если я имею в моем понимании.

РЕДАКТИРОВАНИЕ: Неизменный = Не могущий быть переданным, как только это содержит некоторое значение & не может быть заменен на месте (возможно?)

15
задан brian d foy 20 September 2009 в 17:10
поделиться

4 ответа

В Perl нет эквивалента заголовочным файлам C. Чтобы объявить и определить глобальные константы, вы можете использовать прагму define . У меня нет опыта работы с этим модулем, хотя интерфейс кажется разумным.

С другой стороны, вы можете написать модуль, в котором вы определяете константы и импортируете их в свой модуль, используя , используйте . Например:

package MyConstants;

use strict; use warnings;

use Exporter qw( import );
use Const::Fast;

our @EXPORT = qw();
our @EXPORT_OK = qw( $X $Y );

const our $X => 'this is X';
const our $Y => 'this is Y';

__PACKAGE__;
__END__

Затем вы можете использовать этот модуль следующим образом:

#!/usr/bin/perl

use strict; use warnings;

use MyConstants qw( $X );

print "$X\n";
print "$MyConstants::Y\n";

Если вы согласны с использованием полных имен переменных (например, $ MyConstants :: Y ), вам не нужно Экспортер вообще.

Также убедитесь, что экспортируемые вами переменные нельзя изменить где-либо еще (см. Предупреждение в Exporter docs).

Конечно, вы также можете определить константы, используя ] constant.pm . Возможно, будет быстрее использовать такие константы,

16
ответ дан 1 December 2019 в 02:46
поделиться

Обычно мы делаем это с помощью имени модуля "Константы". Что-то вроде:

package MyPackage::Constants;

our $DIR = "/home/chriss";
our $MAX_FILES = 5;

1;

Затем, чтобы использовать его:

package MyPackage;
use MyPackage::Constants;

open(my $fh, ">", $MyPackage::Constants::DIR . "/file");

Если вы не хотите постоянно ссылаться на пакет, вы можете использовать Exporter и ввести все необходимые символы.

7
ответ дан 1 December 2019 в 02:46
поделиться

Похоже на настройки конфигурации, которые лучше поместить в файл конфигурации, который вы анализируете с помощью одного из различных модулей CPAN, например Config :: Any .

Конфигурация - это данные, которых IMO не должно быть в вашем коде.

5
ответ дан 1 December 2019 в 02:46
поделиться

Один из способов - написать их как модуль Perl, который впоследствии можно будет включить с помощью «require» или «use». Вы бы напишите свой файл так - дайте ему расширение .pm (например, myFabulousPackage.pm)

package myFabulousPackage;

$someSetting=45;
$otherSetting='Fish';

1;

Затем в вашем Perl-скрипте он будет включать файл, а затем ссылаться на $ otherSetting:

#!/usr/bin/perl

use myFabulousPackage;

print $myFabulousPackage::otherSetting;

Это просто очень простое представление о том, что вы можете делать с пакетом / модулем, но для того, что вам нужно, это может быть самый простой способ его реализации. Точно так же вы можете поместить подпрограммы в пакет и ссылаться на них аналогичным образом.

-2
ответ дан 1 December 2019 в 02:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: