strict
СОДЕРЖАНИЕ
ИМЯ
strict - псевдоним Perl для ограничения небезопасных конструкций
СИНТАКСИС
use strict;
use strict "vars";
use strict "refs";
use strict "subs";
use strict;
no strict "vars"; ОПИСАНИЕ
Псевдоним strict отключает определённые выражения Perl, которые могут вести себя неожиданно или являются трудно отлаживаемыми, преобразуя их в ошибки. Действие этого псевдонима ограничено текущим файлом или блоком области видимости.
Если список импорта не указан, предполагаются все возможные ограничения. (Это самый безопасный режим работы, но иногда слишком строгий для обычного программирования.) В настоящее время есть три возможные вещи, по которым можно быть строгими: «subs», «vars» и «refs».
-
strict refs -
Это генерирует ошибку во время выполнения, если вы используете символические ссылки (см. perlref).
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Есть одно исключение из этого правила:
$bar = \&{'foo'}; &$bar;разрешено, чтобы
goto &$AUTOLOADне нарушало ограничение. -
strict vars -
Это генерирует ошибку на этапе компиляции, если вы обращаетесь к переменной, которая не была явно объявлена (используя любой из
my,our,state, илиuse vars) или не была полностью квалифицирована. (Поскольку это для предотвращения проблем с самоуничтожением переменных и скрытых проблем динамической области видимости, простоlocalпеременная недостаточно хороша.) См. "my" в perlfunc, "our" в perlfunc, "state" в perlfunc, "local" в perlfunc и vars.use strict 'vars'; $X::foo = 1; # ok, fully qualified my $foo = 10; # ok, my() var local $baz = 9; # blows up, $baz not declared before package Cinna; our $bar; # Declares $bar in current package $bar = 'HgS'; # ok, global declared via pragmalocal() сгенерировал ошибку на этапе компиляции, потому что вы только что коснулись глобального имени без его полного квалифицирования.
Из-за их специального использования в sort(), переменные $a и $b исключены из этой проверки.
-
strict subs -
Это отключает оптимизацию стихов, генерируя ошибку на этапе компиляции, если вы пытаетесь использовать идентификатор с простым словом, который не является подпрограммой, если он не является простым идентификатором (без двоеточий) и если он появляется в фигурных скобках, слева от
=>символа или к нему применяется унарный минус-оператор.use strict 'subs'; $SIG{PIPE} = Plumber; # blows up $SIG{PIPE} = "Plumber"; # fine: quoted string is always ok $SIG{PIPE} = \&Plumber; # preferred form
См. "Псевдонимы модулей" в perlmodlib.
ИСТОРИЯ
strict 'subs', с Perl 5.6.1, ошибочно разрешалось использовать нецитируемый составной идентификатор (например, Foo::Bar) в качестве ключа хэша (до => или внутри фигурных скобок), но без принудительного преобразования его в строку.
Начиная с Perl 5.8.1 strict строг в своих ограничениях: если используются неизвестные ограничения, псевдоним strict завершит работу с
Unknown 'strict' tag(s) '...' По состоянию на версию 1.04 (Perl 5.10), strict проверяет, что он используется как «strict», чтобы избежать ужасной ловушки Strict на файловых системах с регистронезависимыми именами файлов.
© 1993–2023 Larry Wall and others
Licensed under the GNU General Public License version 1 or later, or the Artistic License.
The Perl logo is a trademark of the Perl Foundation.
https://perldoc.perl.org/5.38.0/strict