免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 7906 | 回复: 18
打印 上一主题 下一主题

有些不爽,perl好像没有内置计算time_diff的功能 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-08-14 23:23 |只看该作者 |倒序浏览
20可用积分
工作后主要使用的语言是C++,最近又在看erlang学学基于函数式编程的消息传递的并发模型
于是有些日子没有用perl了

今天忽然要算算自己工作几周了,本来这种事情掐掐手指也是可以算的,不过区区最终想用程序
来算(因为旁边还有几个哥们儿也要算日期)

当时机子的情况是:
开启着emacs,里面有一个*erlang*的buffer,
机子里装有几乎所有我常用的语言解释器,(如perl,python,lua,tcl,scheme,common lisp)

第一个想到使用的是python,因为有interactive shell,又可以用help(module)来查
帮助(实用主义)。结果用下面的代码算出工作时间了。。用时4分钟(比掐手指算慢太多,惭愧)


from datetime import *
(date(2007,8,14) - date(2006,7,7)).days / 7


后来回想一下,自己真不够意思,明明在学erlang的呀,erlang也是interactive shell,
虽然没有类似emacs或者python那样的在线帮助,可以也可以打开docs目录查的~
所以又查erlang的文档来算(没事找抽主义),因为模块名叫calendar而不是dateXXX/timeXXX,所以花了7分钟~

代码如下:

{Diff, _} = (calendar:time_difference({ {2006,7, 7},{0,0,0} },
                                          { {2007,8,14},{0,0,0} }))
, Diff div 7.


晚上在家上网,忽然想起这件事情,又想着用perl是不是也可以很快算出来呢。(百无聊赖主义)

perldoc perlsub            #才想起来,这个doc不是sub列表的

perldoc perltoc             #没办法,只好看看目录了

#.............................

#目录太长,只好改看activestate的html版,

perldoc perlfunc            #只找到time times gmtime localtime

#不过这三个函数都没有区区想要的功能

#无奈,只好到CPAN去搜,

#一开始找到一个Date::Time,细看才知道是个差不多算夭折的模块

#再接着,找到DateTime,总算是找到一个功能对头的CPAN了。。。不过些时区区也不想再搜下去了

#.................不爽。




C++之父BS大伯说过,程序库对一个语言是至关重要的。。
那区区觉得,标准库对一个语言,那就是相当重要了,
回想起这个事件上perl的表现,看来大部分perl用户已经有把CPAN当作标准库的习惯了。。

[ 本帖最后由 uppet 于 2007-8-14 23:25 编辑 ]

最佳答案

查看完整内容

CPAN 不等于 Perl 标准模块(也就是你所说的标准库)。Perl 内置函数和 Perl 标准模块也不一样。除了由 perl.exe 或者 /usr/bin/perl 及其动态链接库 libperl.so/perl??.dll 内置实现的函数,标准的 Perl 发行版还包括了其它的一些模块,这个叫做“标准模块”。也就是说,任何一个具备了 Perl 环境的机器上,都会有的模块。如同 Python 中的 from datetime import * 或者 import datetime 一样,Perl 中的语法是:比如:而 Time::L ...

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
2 [报告]
发表于 2007-08-14 23:23 |只看该作者
CPAN 不等于 Perl 标准模块(也就是你所说的标准库)。
Perl 内置函数和 Perl 标准模块也不一样。
除了由 perl.exe 或者 /usr/bin/perl 及其动态链接库 libperl.so/perl??.dll 内置实现的函数,标准的 Perl 发行版还包括了其它的一些模块,这个叫做“标准模块”。
也就是说,任何一个具备了 Perl 环境的机器上,都会有的模块。

如同 Python 中的 from datetime import * 或者 import datetime 一样,
Perl 中的语法是:
  1. use Module::Name;
复制代码

比如:
  1. use Time::Local;

  2. $time1 = timelocal( 0, 0, 0, 15, 7, 107 );
  3. $time2 = timelocal( 0, 0, 0, 15, 4, 107 );

  4. print scalar localtime( $time1 ), "\n";
  5. print scalar localtime( $time2 ), "\n";

  6. $days = ( $time1 - $time2 ) / 86_400;
  7. print $days;
复制代码

而 Time::Local 正是 Perl 的标准模块。

论坛徽章:
0
3 [报告]
发表于 2007-08-15 10:05 |只看该作者
謝謝flw的帖子

论坛徽章:
0
4 [报告]
发表于 2007-08-15 11:35 |只看该作者
呵呵,谢谢,,怎么说呢??
帮助系统的差别吧,或者说,是区区理解帮助系统能力的差别。
再次打开activestate的帮助,也看到Time::Loal了,说实在的,当时只觉得
这个Time::Local和localtime是一个作用的。
(其实这两个名字刚好反过来,应了POD里的一句话:“These routines are the inverse of built-in perl functions localtime() and gmtime()”)

总结如下,算日期时间差的话:
perl   ->使用 Time::Local
python ->使用 datetime模块
erlang ->使用 calendar模块

评分

参与人数 1可用积分 +2 收起 理由
flw + 2 总结得很好!

查看全部评分

论坛徽章:
0
5 [报告]
发表于 2007-08-15 11:42 |只看该作者
原帖由 uppet 于 2007-8-15 11:35 发表
区区


楼主,"区区"到底是啥意思?
原帖里面还出现了三次"区区".

[ 本帖最后由 gsging 于 2007-8-15 11:44 编辑 ]

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
6 [报告]
发表于 2007-08-15 12:21 |只看该作者
原帖由 gsging 于 2007-8-15 11:42 发表

楼主,"区区"到底是啥意思?
原帖里面还出现了三次"区区".

应该是“在下”、“鄙人”的意思吧。

论坛徽章:
0
7 [报告]
发表于 2007-08-15 12:25 |只看该作者
呃~
在区区看来,区区就是楼主:wink:

论坛徽章:
0
8 [报告]
发表于 2007-08-16 06:28 |只看该作者
请问flw大大,86_400 里面那个 _ 是什么意思?

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
9 [报告]
发表于 2007-08-16 06:58 |只看该作者
原帖由 hfmouse 于 2007-8-16 06:28 发表
请问flw大大,86_400 里面那个 _ 是什么意思?

没什么意思,只是让数字看上去更加清晰一些,
Perl 支持这样的写法。

论坛徽章:
0
10 [报告]
发表于 2007-08-16 11:07 |只看该作者
原帖由 flw 于 2007-8-16 06:58 发表

没什么意思,只是让数字看上去更加清晰一些,
Perl 支持这样的写法。


其实写成60*60*24(一天的秒数),楼下楼上就明白咯~~~
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP