Spec-Zone.ru › Perl 5.34

строгий

СОДЕРЖАНИЕ

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

ИМЯ

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() сгенерировал ошибку компиляции, потому что вы только что коснулись глобального имени без его полного квалифицирования.

Из-за их специального использования в 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

Spec-Zone.ru

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