строгий
СОДЕРЖАНИЕ
ИМЯ
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() сгенерирует ошибку на стадии компиляции, так как вы просто обратились к имени глобальной переменной без полного указания квалификации.
Переменные $a и $b освобождены от проверки из-за их специфического использования в функции sort().
-
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–2020 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.28.3/strict