Spec-Zone.ru › Perl 5.38

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

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

См. "Псевдонимы модулей" в 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–2023 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.38.0/strict

Spec-Zone.ru

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