Spec-Zone.ru › Perl 5.36

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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API