免费注册 查看新帖 |

Chinaunix

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

已经解决.结贴 脚本 Perl - 关于模块 Tie::File 的几点疑问 [复制链接]

求职 : 软件工程师
论坛徽章:
3
程序设计版块每日发帖之星
日期:2015-10-07 06:20:00程序设计版块每日发帖之星
日期:2015-12-13 06:20:00程序设计版块每日发帖之星
日期:2016-05-05 06:20:00
21 [报告]
发表于 2015-12-03 23:06 |只看该作者
回复 19# sunzhiguolu


    我没有用过,只是最近才发现这个东西,想来想去,实在是没有用。

论坛徽章:
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
22 [报告]
发表于 2015-12-04 00:18 |只看该作者
回复 21# 104359176
我使用 Perl 时间较短, 只是有不明白的地方向您请教.

   

求职 : 软件工程师
论坛徽章:
3
程序设计版块每日发帖之星
日期:2015-10-07 06:20:00程序设计版块每日发帖之星
日期:2015-12-13 06:20:00程序设计版块每日发帖之星
日期:2016-05-05 06:20:00
23 [报告]
发表于 2015-12-04 14:25 |只看该作者
学习 Perl 语言,很容易把注意力放在一些很少用到的特性上,因为 Perl 的各种古怪特性实在是太多了。Perl 语言有许多的糟粕,是没有必要深入了解的。例如 delete array 的行为。

Perl 语言的变量有标量和数组,还有哈希。所有的数值都能用标量形式表示,其实只要学会用标量表示数据就够了。
  1. my $str = 'aaa';
  2. my $array = [1,2,3];
  3. my $hash = { a => 1 };
复制代码
而下列用法完全可以不用:
  1. my @array = (1,2,3);
  2. my %hash = ( a => 1 );
复制代码
而 @array 的表示方法,只是把它当成一个可以容纳多个标量的容器:
  1. my ($name, $value) = @args;
复制代码
Perl5 不能对比数据结构,所以当你对比一个嵌套的数据结构时,最好使用 JSON 模块:
  1. use JSON qw(encode_json);

  2. my $data_one = [1,2,[3,4]];
  3. my $data_two = [1,2,[3,4]];

  4. if (encode_json($data_one) eq encode_json($data_two)) {
  5.     say "data is same";
  6. }
复制代码
如果这样写,就错了:
  1. if ($data_one eq $data_two) {
  2.     say "data is same";
  3. }
复制代码
要想使操作引用的行为和直接量相同,最好声明:
  1. use experimental qw(autoderef);
复制代码
这样下面的语句就能使用了:
  1. for my $key (keys $hash) {
  2.     say "key is $key";
  3. }

  4. for my $value (values $array) {
  5.    # ...
  6. }

  7. push $array, $key;
  8. shift $array;
  9. pop $array;
  10. delete $hash->{$key};
  11. exists $hash->{$key};
复制代码
引用最方便的地方就是没有数据复制成本,但如果不想修改原数据,需要对数据结构进行复制:
  1. my $copy_array = [ @{ $array } ];
复制代码
因为 splice, push, shift, unshift, pop, delete 等内置函数会直接在数据本身进行修改。

substr 与其说是内置函数,不如说是 Perl 的关键字, 因为下面的代码是错误的:
  1. my ($str, $pos, $len) = @args;
  2. my $sub_str = substr(@args); # error
  3. my $sub_str = substr($str, $pos, $len); # ok
复制代码
Perl 还有很多特性容易让人迷惑,如果想了解。就看看 Ruby, Python,看同样的算法,是怎么样实现的。

评分

参与人数 1信誉积分 +10 收起 理由
sunzhiguolu + 10 很给力!

查看全部评分

论坛徽章:
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
24 [报告]
发表于 2015-12-04 19:21 |只看该作者
本帖最后由 sunzhiguolu 于 2015-12-04 19:23 编辑

回复 23# 104359176
非常感谢您的指点, 学了好多.
关于 Perl 的引用的概念还没有学到, 感觉挺您讲的非常好. (也非常喜欢您举得例子)
另外向您请教一个我在上面提到的一个问题, 就是 Tie::File 模块的 memory 选项的问题, 延迟写入为什么在程序的执行时没有 效果?
如果您方便的话, 能否给我讲讲. 我在模块的学习方面全是看论坛中的 大神, 前辈 使用的时候照葫芦画瓢的用法, 所以问题多多.



   

论坛徽章:
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
25 [报告]
发表于 2015-12-04 19:30 |只看该作者
回复 16# MMMIX
如果大神方便的话, 能否指点一下关于 Tie::File 模块的 memory 选项 延迟写入的问题?
期待您的回复, 谢谢您!

   

论坛徽章:
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
26 [报告]
发表于 2015-12-04 20:56 |只看该作者
sunzhiguolu 发表于 2015-12-04 19:30
回复 16# MMMIX
如果大神方便的话, 能否指点一下关于 Tie::File 模块的 memory 选项 延迟写入的问题?
期 ...


期待你把 Tie::File 的文档仔细、完整的看一遍再来问问题,谢谢!

论坛徽章:
26
2015亚冠之胡齐斯坦钢铁
日期:2015-06-25 21:40:202015亚冠之柏斯波利斯
日期:2015-08-31 17:03:192015亚冠之柏斯波利斯
日期:2015-11-07 13:10:00程序设计版块每日发帖之星
日期:2015-11-10 06:20:00每日论坛发贴之星
日期:2015-11-10 06:20:00程序设计版块每日发帖之星
日期:2015-11-26 06:20:00程序设计版块每日发帖之星
日期:2015-12-02 06:20:00黄金圣斗士
日期:2015-12-07 17:57:4615-16赛季CBA联赛之天津
日期:2015-12-23 18:34:14程序设计版块每日发帖之星
日期:2016-01-02 06:20:00程序设计版块每日发帖之星
日期:2016-01-06 06:20:00每日论坛发贴之星
日期:2016-01-06 06:20:00
27 [报告]
发表于 2015-12-04 21:12 |只看该作者
回复 23# 104359176

一个题外话, 就是
感觉大神讲的非常好

论坛徽章:
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
28 [报告]
发表于 2015-12-04 21:45 |只看该作者
本帖最后由 sunzhiguolu 于 2015-12-04 21:46 编辑

回复 26# MMMIX
大神您好, 还是您教导的是.
文档我没有看完整, 还有一个问题向您请教:
没有指定 memory 选项时, 延迟写入的数据缓存量是否可以认为是整个 memory 的默认大小 (2MB) 减去 延迟写入自身的开销?

   

论坛徽章:
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
29 [报告]
发表于 2015-12-04 21:51 |只看该作者
本帖最后由 sunzhiguolu 于 2015-12-05 09:44 编辑

回复 27# substr函数
严重同意您的观点...

   

论坛徽章:
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
30 [报告]
发表于 2015-12-04 22:01 |只看该作者
回复 27# substr函数
对了, 向您请教个问题 Python 对正则的支持如何? 中文学习资料多吗?

   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP