免费注册 查看新帖 |

Chinaunix

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

文件怎么读入hash [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-11-12 14:07 |只看该作者 |倒序浏览
5可用积分

大神,帮忙看下整个文件怎么读进hash。

DATA:
  1. [NAME]
  2. TOM

  3. [AGE]
  4. 23

  5. [TALL]
  6. 180CM

  7. [favorite person]
  8. Lily
  9. Jimmy

复制代码
一个一个的读我用的是:
  1. while(<DATA>){
  2.     my $match_key = shift;
  3.     if (m/$match_key/ig..m/\[.*\]/ig){
  4.            print;
  5.     }
  6. }
复制代码

最佳答案

查看完整内容

回复 1# 609854

论坛徽章:
5
丑牛
日期:2014-01-21 08:26:26卯兔
日期:2014-03-11 06:37:43天秤座
日期:2014-03-25 08:52:52寅虎
日期:2014-04-19 11:39:48午马
日期:2014-08-06 03:56:58
2 [报告]
发表于 2013-11-12 14:07 |只看该作者
  1. my ( $value, @hash ) = 1;
  2. while (<DATA>) {
  3.     next if /^\s*$/;
  4.     if (/\[(.*)\]/) {
  5.         push @hash, $value == 0 ? ( '', $1 ) : $1;
  6.         $value = 0;
  7.     }
  8.     elsif ($value) {
  9.         chomp;
  10.         ref $hash[-1]
  11.           ? push @{ $hash[-1] }, $_
  12.           : ( $hash[-1] = [ $hash[-1], $_ ] );
  13.     }
  14.     else {
  15.         chomp;
  16.         push @hash, $_ and $value++;
  17.     }
  18. }
  19. my %hash = @hash;

  20. print $hash{NAME};

  21. __DATA__
  22. [NAME]
  23. TOM

  24. [AGE]
  25. 23

  26. [TALL]
  27. 180CM

  28. [favorite person]
  29. Lily
  30. Jimmy

  31. [NO Value]

  32. [LAN]
  33. perl
复制代码
回复 1# 609854


   

论坛徽章:
3
CU十二周年纪念徽章
日期:2013-10-24 15:41:34子鼠
日期:2013-12-14 14:57:19射手座
日期:2014-04-25 21:23:23
3 [报告]
发表于 2013-11-12 16:42 |只看该作者
回复 1# 609854
  1. my $h;
  2. while(<DATA>){
  3.     next if /^\s*$/;
  4.     /[[]([^]]+)/?$h->{$1}=():push @{$h->{$1}},$_;
  5. }
  6. print "$_=>",@{$h->{$_}},"\n" for keys $h;

  7. __DATA__
  8. [NAME]
  9. TOM

  10. [AGE]
  11. 23

  12. [TALL]
  13. 180CM

  14. [favorite person]
  15. Lily
  16. Jimmy

  17. [NO Value]

  18. [LAN]
  19. perl
复制代码

论坛徽章:
0
4 [报告]
发表于 2013-11-12 16:59 |只看该作者
回复 2# pitonas


    ref $hash[-1]
          ? push @{ $hash[-1] }, $_
          : ( $hash[-1] = [ $hash[-1], $_ ] );

这个是什么意思。

论坛徽章:
7
戌狗
日期:2013-12-15 20:43:38技术图书徽章
日期:2014-03-05 01:33:12技术图书徽章
日期:2014-03-15 20:31:17未羊
日期:2014-03-25 23:48:20丑牛
日期:2014-04-07 22:37:44巳蛇
日期:2014-04-11 21:58:0915-16赛季CBA联赛之青岛
日期:2016-03-17 20:36:13
5 [报告]
发表于 2013-11-12 22:48 |只看该作者
回复 3# mcshell
  1.     /[[]([^]]+)/?$h->{$1}=():push @{$h->{$1}},$_;
复制代码

   

   

论坛徽章:
3
CU十二周年纪念徽章
日期:2013-10-24 15:41:34子鼠
日期:2013-12-14 14:57:19射手座
日期:2014-04-25 21:23:23
6 [报告]
发表于 2013-11-13 08:56 |只看该作者
{:3_190:} {:3_190:} 回复 5# rubyish


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

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP