Spec-Zone.ru › Perl 5.30

строгий

СОДЕРЖАНИЕ

  • ИМЯ
  • СИНОПСИС
  • ОПИСАНИЕ
  • ИСТОРИЯ

ИМЯ

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

Это отключает оптимизацию поэзии, генерируя ошибку на стадии компиляции, если вы пытаетесь использовать идентификатор без имени подпрограммы, если только это не простой идентификатор (без двоеточий), и он появляется в фигурных скобках или в левой части => символа.

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

Spec-Zone.ru

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