免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: plpm
打印 上一主题 下一主题

关于Perl中的版本号的问题 [复制链接]

论坛徽章:
46
15-16赛季CBA联赛之四川
日期:2018-03-27 11:59:132015年亚洲杯之沙特阿拉伯
日期:2015-04-11 17:31:45天蝎座
日期:2015-03-25 16:56:49双鱼座
日期:2015-03-25 16:56:30摩羯座
日期:2015-03-25 16:56:09巳蛇
日期:2015-03-25 16:55:30卯兔
日期:2015-03-25 16:54:29子鼠
日期:2015-03-25 16:53:59申猴
日期:2015-03-25 16:53:29寅虎
日期:2015-03-25 16:52:29羊年新春福章
日期:2015-03-25 16:51:212015亚冠之布里斯班狮吼
日期:2015-07-13 10:44:56
11 [报告]
发表于 2017-01-05 20:45 |只看该作者
简直酷炫,盲人程序员

论坛徽章:
42
19周年集字徽章-周
日期:2019-10-14 14:35:31平安夜徽章
日期:2015-12-26 00:06:30数据库技术版块每日发帖之星
日期:2015-12-01 06:20:002015亚冠之首尔
日期:2015-11-04 22:25:43IT运维版块每日发帖之星
日期:2015-08-17 06:20:00寅虎
日期:2014-06-04 16:25:27狮子座
日期:2014-05-12 11:00:00辰龙
日期:2013-12-20 17:07:19射手座
日期:2013-10-24 21:01:23CU十二周年纪念徽章
日期:2013-10-24 15:41:34IT运维版块每日发帖之星
日期:2016-01-27 06:20:0015-16赛季CBA联赛之新疆
日期:2016-06-07 14:10:01
12 [报告]
发表于 2017-01-06 09:06 |只看该作者
回复 11# zhlong8


不懂
是说注释了吗?

  1. <P> </P>
复制代码

但是LZ问的就是默认开启。而不是需要use啊。
前面@MMMIX说的也是默认开启。

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
13 [报告]
发表于 2017-01-06 10:38 |只看该作者
回复 12# laputa73

compatible issue

$ cat say.pl

sub say{
  print "say:@_\n";
}

say "123";

$ perl say.pl
say:123

$ perl -M5.010 say.pl
123

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
14 [报告]
发表于 2017-01-06 14:01 |只看该作者
回复 12# laputa73

你完全把我的话弄拧了。我说 say 在 5.10 就默认开启的意思是当你通过 use 指定需要至少 5.10 版本 Perl 的时候,就不需要再通过额外的 use feature 来打开 say 支持了;而不是说只要你用了 5.10 以上版本的 perl 解释器,它支持的所有特性就默认打开了。


出于兼容性考虑,默认情况下的 perl 的行为是非常保守的。

论坛徽章:
46
15-16赛季CBA联赛之四川
日期:2018-03-27 11:59:132015年亚洲杯之沙特阿拉伯
日期:2015-04-11 17:31:45天蝎座
日期:2015-03-25 16:56:49双鱼座
日期:2015-03-25 16:56:30摩羯座
日期:2015-03-25 16:56:09巳蛇
日期:2015-03-25 16:55:30卯兔
日期:2015-03-25 16:54:29子鼠
日期:2015-03-25 16:53:59申猴
日期:2015-03-25 16:53:29寅虎
日期:2015-03-25 16:52:29羊年新春福章
日期:2015-03-25 16:51:212015亚冠之布里斯班狮吼
日期:2015-07-13 10:44:56
15 [报告]
发表于 2017-01-06 15:56 |只看该作者
1.新版本的功能老版本的解释器可能无法使用,严格起见必须声明代码正确运行需要的版本。Perl 保证兼容旧代码,所以声明需要的最低版本就行了。
2.新的关键字可能会破坏旧代码的语义,特别是 Perl 开始设计时非常随意。
  比如旧代码想用字符串时甚至可以不加引号 比如 perl -e "print 1,say"。保证旧代码语义,那就不能加新关键字。为了发展语言就只能让使用者保证:我知道这些关键字,保证不乱用。

论坛徽章:
46
15-16赛季CBA联赛之四川
日期:2018-03-27 11:59:132015年亚洲杯之沙特阿拉伯
日期:2015-04-11 17:31:45天蝎座
日期:2015-03-25 16:56:49双鱼座
日期:2015-03-25 16:56:30摩羯座
日期:2015-03-25 16:56:09巳蛇
日期:2015-03-25 16:55:30卯兔
日期:2015-03-25 16:54:29子鼠
日期:2015-03-25 16:53:59申猴
日期:2015-03-25 16:53:29寅虎
日期:2015-03-25 16:52:29羊年新春福章
日期:2015-03-25 16:51:212015亚冠之布里斯班狮吼
日期:2015-07-13 10:44:56
16 [报告]
发表于 2017-01-06 15:58 |只看该作者
我举的这个例子1995年之后就不应该这么用了,别拿这个说事。

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
17 [报告]
发表于 2017-01-06 16:38 |只看该作者
大神来了不少 楼主可以出来说一下你想问的问题了。。。

论坛徽章:
2
综合交流区版块每日发帖之星
日期:2016-07-06 06:20:00综合交流区版块每日发帖之星
日期:2016-08-16 06:20:00
18 [报告]
发表于 2017-01-06 20:12 |只看该作者
回复 3# zhlong8

论坛徽章:
42
19周年集字徽章-周
日期:2019-10-14 14:35:31平安夜徽章
日期:2015-12-26 00:06:30数据库技术版块每日发帖之星
日期:2015-12-01 06:20:002015亚冠之首尔
日期:2015-11-04 22:25:43IT运维版块每日发帖之星
日期:2015-08-17 06:20:00寅虎
日期:2014-06-04 16:25:27狮子座
日期:2014-05-12 11:00:00辰龙
日期:2013-12-20 17:07:19射手座
日期:2013-10-24 21:01:23CU十二周年纪念徽章
日期:2013-10-24 15:41:34IT运维版块每日发帖之星
日期:2016-01-27 06:20:0015-16赛季CBA联赛之新疆
日期:2016-06-07 14:10:01
19 [报告]
发表于 2017-01-09 08:31 |只看该作者
涨姿势了
以前对这个版本号还真没特殊关注过。
一直默认过来的。
默认这个词确实是有歧义的。

论坛徽章:
0
20 [报告]
发表于 2017-02-08 22:08 |只看该作者
好久没来,没想到看到这么多热心人的回答。我首先感谢大家以及版主的精彩回答了。
其次,我通过阅读了大家的回答以及perl内置的文档说明后,简单小结了下。
1. perl的版本号是三位的,并且是数字的,版本号10全称就是010(加了个前导0),那么5.22就是5.022。 (详见#3楼)
2. 关于use的语法有多种使用方式,(详见perldoc -f use)
  1. use v5.6.1;     # compile time version check
  2. use 5.6.1;      # ditto
  3. use 5.006_001;  # ditto; preferred for backwards compatibility
复制代码


我自己试了下,use 5.22.0, use 5.022, use 5.017.11 都是可以使用say的。可见,use的版本号只要不大于当前安装的perl版本号即可
3. say是一种feature,并且是Perl 6的。所以它默认在任何的Perl 5编译器下,都是不能识别的。
4. 除了say,perl还提供了很多个feature,比如,state, switch, unicode_strings等等。
开启feature的方法,以switch为例:use feature 'switch'
为了方便,perl将不同的feature进行分组,提供了多个feature组。(参考 perldoc feature)
例如,use 5.010; 就会开启 say state switch array_base 这几个feature

bundle    features included
--------- -----------------
:default  array_base

:5.10     say state switch array_base

:5.12     say state switch unicode_strings array_base

:5.14     say state switch unicode_strings array_base

:5.16     say state switch unicode_strings
          unicode_eval evalbytes current_sub fc

:5.18     say state switch unicode_strings
          unicode_eval evalbytes current_sub fc

:5.20     say state switch unicode_strings
          unicode_eval evalbytes current_sub fc

:5.22     say state switch unicode_strings
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP