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 pragmaФункция local() порождает ошибку на этапе компиляции, так как вы просто обратились к глобальной переменной, не квалифицируя её полностью.
Переменные $a и $b исключены из этой проверки из-за их специального использования в функции sort().
-
strict subs -
Это отключает оптимизацию стилей, порождая ошибку на этапе компиляции, если вы пытаетесь использовать идентификатор в стиле "bareword", который не является подпрограммой, за исключением случаев, когда это простой идентификатор (без двоеточий) и он находится в фигурных скобках, слева от оператора
=>или к нему применён унарный минус.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–2021 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.36.0/strict