LINUX.ORG.RU

Perl парсит код по старой версии, меньше чем у самого интерпретатора.


0

1

Добрый вечер (или день).

Perl v5.12.3. Анализирует код не с 5.12, а с версией ниже (даже ниже 5.10) изза чего некоторые фичи не работают, на пример статические переменные в пользовательских функциях. Приходится использовать директиву USE 5.012.

1) Почему так?
2) Нормально ли это?
3) Как в коде узнать используемую версию анализа?

Спасибо.

★★★

Последнее исправление: normann (всего исправлений: 2)

Все верно

$ perl --version

This is perl 5, version 12, subversion 4 (v5.12.4) built for darwin-thread-multi-2level
(with 2 registered patches, see perl -V for more detail)

Copyright 1987-2010, Larry Wall

Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5 source kit.

Complete documentation for Perl, including FAQ lists, should be found on
this system using "man perl" or "perldoc perl".  If you have access to the
Internet, point your browser at http://www.perl.org/, the Perl Home Page.

$ cat b.pl
use strict;
use v5.10;

say 'kuca kuku';

$ perl b.pl 
kuca kuku
$ cat bfail.pl 
use strict;

say 'kuca kuku';

$ perl bfail.pl 
String found where operator expected at bfail.pl line 3, near "say 'kuca kuku'"
	(Do you need to predeclare say?)
syntax error at bfail.pl line 3, near "say 'kuca kuku'"
Execution of bfail.pl aborted due to compilation errors.
$
anonymous
()

1) Для обратной совместимости?

2) Да.

3) Не лучше ли указывать, для какой версии код написан? А Perl сам постарается вести себя максимально похожим на данную версию образом.

Ещё вариант - использовать прагму feature.

AITap ★★★★★
()

Почему так?

Обратная совместимость, лучшая управляемость и предсказуемость поведения интерпретатора. Такое решение приняли разработчики языка.

Нормально ли это?

Абсолютно. Часто выручает.

Как в коде узнать используемую версию анализа?

Примеры рантайма: perl -MEnglish -E 'say $^V and say $PERL_VERSION;'

outtaspace ★★★
()

Не надо пользоваться экспериментальными штучками, забанили в perldoc ? А если пользуешься, то должен всегда писать о них в шапках, даже если версия их поддерживает «из коробки», т.к. засорять малонужными вещами рантайм никто не собирается.

http://perldoc.perl.org/feature.html

http://perldoc.perl.org/functions/state.html

http://perldoc.perl.org/functions/say.html

gh0stwizard ★★★★★
()

Спасибо всем за ответы.

Я в перле новичек, а английским владею не на столько чтобы осилить весь perldoc. Поэтому читаю книгу с ламой на русском в которой учат испоьзовать эти эксперементальные штучки не выделяя их признаком эксперементальности. По моему вполне безобидные штучки.

normann ★★★
() автор топика
Ответ на: комментарий от normann

Поэтому читаю книгу с ламой на русском в которой учат испоьзовать эти эксперементальные штучки

Чето я не помню в lama book чего-либо специфичного для новых версий перла. По идее, там всё под 5.8 заточено ЕМНИП.

DELIRIUM ☆☆☆☆☆
()
Ответ на: комментарий от normann

Пользуйтесь любыми экспериментальными фичами в свое удовольствие и помните что свежие версии интерпретатора сами по себе весьма экспериментальные.

outtaspace ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.