Perl: Какие именно функции включает «использование 5.014»? - PullRequest
22 голосов
/ 20 июня 2011

Что именно включает «использование 5.014»?

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

thanx.

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 

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

Ответы [ 3 ]

27 голосов
/ 20 июня 2011

Помимо того, что 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);
}
4 голосов
/ 20 июня 2011

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

4 голосов
/ 20 июня 2011

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

#!/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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...