строгий
СОДЕРЖАНИЕ
ИМЯ
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
См. "Pragmatic Modules" в 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.34.0/strict