+ -
当前位置:首页 → 问答吧 → 新手求教:从文件中匹配字符串作为变量名,生成hash,表如何实现?

新手求教:从文件中匹配字符串作为变量名,生成hash,表如何实现?

时间:2010-12-23

来源:互联网

实现的功能:
1. 从指定文件target.txt中得到需要的字符串A,B,C,字符串是以"[%A%]"为标记
2. 将A,B,C作为Hash表的key保存,同时赋值相应的Value,不能重复
3. hash的Value是变量名$a, $b, $c

目前只完成第一步,输出内容还是错的,请高手纠错,并能否提示一下第2,3怎么实现?!

#!/usr/bin/perl -w
      use strict;   
      my $file = "target.txt";
     
      if (-e $file) {
              open (FH, $file) or die "Can not open the file!$!\n";
                   while (<FH>) {
                      if (~/\[%(.*?)%\]/g) {
                              print "$1\n";
                              }                    
              }
             close(FH);
            }


target.txt的内容是(第一行是空行):

a[%A%]tyrt,
a[%B%]245
a[%B%]111
31q35345234tergsrfg
<br>
<img src=SW-[%C%].jpeg>
<br>
<br>

输出内容:
Use of uninitialized value in concatenation (.) or string at D:\tmp.pl line 21, <FH> line 1.

A
A
B
B
3
>
C
C

实际上预期的结果应该是:
A
B
C

作者: lillainpcy   发布时间: 2010-12-23

本帖最后由 zhlong8 于 2010-12-23 11:20 编辑

RE不是这么用的  if (~/\[%(.*?)%\]/g) {  不需要 ~, =~ 是一个操作符不许拆开

你要求的 hash Value 是什么没搞懂,$hash{$1} = sth 就可以了啊

作者: zhlong8   发布时间: 2010-12-23



QUOTE:
RE不是这么用的  if (~/\[%(.*?)%\]/g) {  不需要 ~, =~ 是一个操作符不许拆开

你要求的 hash Value 是 ...
zhlong8 发表于 2010-12-23 11:19




    多谢!
将"~"删除后,输出的结果是:
A
B
B
C

现在只要将重复的去掉就行。

另一个问题:"sth"指什么?

作者: lillainpcy   发布时间: 2010-12-23