Perl: Какие именно функции позволяют использовать "5.014"?

Что именно использует "использование 5.014"?

Пожалуйста, кто-то скопирует и вставьте сюда, потому что я не смог найти его в любом perldoc. (может быть, я слепой). В функции "perldoc" - только некоторые вещи для 5.10. Или укажите мне URL.

спасибо.

EDIT:

Пожалуйста, сначала проверьте, что вы ответите. Например: попробуйте следующее:

use 5.008;
$s=1;
say "hello";

Вы получите сообщение об ошибке "say", потому что perl 5.8 не знает "say"

после, попробуйте следующее:

use 5.014;
$s=1;
say "hello";

вы получите сообщение об ошибке

Global symbol "$s" requires explicit package name 

так, "use 5.014" включение use strict и use feature 'say'; - по умолчанию.

Ответ 1

Помимо что правильно сказал raj о сообщениях об ошибках, которые вы получили бы при использовании use 5.014 со старой версией Perl, вы можете найти список включенных функций прочитав исходный код feature. Соответствующая часть находится в верхней части:

my %feature_bundle = (
    "5.10" => [qw(switch say state)],
    "5.11" => [qw(switch say state unicode_strings)],
    "5.12" => [qw(switch say state unicode_strings)],
    "5.13" => [qw(switch say state unicode_strings)],
    "5.14" => [qw(switch say state unicode_strings)],
);

Строгая часть бит похожа несколько глубже в коде самого интерпретатора. Если вы посмотрите pp_ctl.c для тега v5.11.0:

/* If a version >= 5.11.0 is requested, strictures are on by default! */

if (PL_compcv && vcmp(sv, sv_2mortal(upg_version(newSVnv(5.011000), FALSE))) >= 0) {
    PL_hints |= (HINT_STRICT_REFS | HINT_STRICT_SUBS | HINT_STRICT_VARS);
}

Ответ 2

use x.x.x pragma делает включение некоторых функций, и достаточно просто проверить это:

#!/usr/bin/env perl
use warnings;
use 5.14.0;

say "hello world!"

Отлично работает; выводит "привет мир!".

#!/usr/bin/env perl
use warnings;
# use 5.14.0;

say "hello world!"

Пылающая смерть; выводит это сообщение об ошибке:

Unquoted string "say" may clash with future reserved word at foo line 5.
String found where operator expected at foo line 5, near "say "hello world!""
    (Do you need to predeclare say?)
syntax error at foo line 5, near "say "hello world!""
Execution of foo aborted due to compilation errors.

Я не уверен, однако, что 100% уверены, какие функции включены с 5.14.0. Я считаю, что вы получаете say, state, switch, unicode_strings и strict.

Ответ 3

В новых Perls (начиная с 5.10, я думаю) use 5.x делает неявное use feature ':5.x' Чтение через perldeltas для 5.12 и 5.14, я вижу связанную с Unicode функцию, добавленную в 5.12, но, похоже, ничего не было добавлено в 5.14.