简单的文件内容如何初始化入hash数组?

简单的文件内容如何初始化入hash数组?

文件内容如下:
1   a
2   b
3   c
。。。
请问这中文件如何快速初始化成hash数组呢?我用%m=`cat file`方式不行,谢谢!


[Copy to clipboard] [ - ]
CODE:
$m{(split)[0]}=(split)[1] while(<DATA>);

while(($key,$value) = each %m){
        print "$key=>$value\n";
}

__END__
1   a
2   b
3   c



QUOTE:
原帖由 hitsubunnu 于 2008-11-10 11:09 发表

$m{(split)[0]}=(split)[1] while();

while(($key,$value) = each %m){
        print "$key=>$value\n";
}

__END__
1   a
2   b
3   c

你这样要 split 2次的。

#!usr/local/bin/perl

my %hash = map { chomp; split} <DATA>;

for (keys %hash) {
        print $_, " => ", $hash{$_}, "\n";
}
__END__
1   a
2   b
3   c


QUOTE:
原帖由 cobrawgl 于 2008-11-10 11:25 发表


你这样要 split 2次的。

#!usr/local/bin/perl

my %hash = map { chomp; split} ;

for (keys %hash) {
        print $_, " => ", $hash{$_}, "\n";
}
__END__
1   a
2   b
3   c

你这个是 将全部数据放到一个数组中  文件大了 效率也不好吧


QUOTE:
原帖由 hitsubunnu 于 2008-11-10 11:31 发表


你这个是 将全部数据放到一个数组中  文件大了 效率也不好吧

那把 map 改为 while 循环就完了。
我来添乱
my %hash = split /\s+/, do{local $/; <DATA>;};
用正则的效率高,还是split效率高呢?
while(<DATA>){
  /^(.+)\d+(.+)$/;
  $m{$1}=$2;
}

while(($key,$value) = each %m){
        print "$key=>$value\n";
}

__END__
1   a
2   b
3   c


QUOTE:
原帖由 machine 于 2008-11-11 10:30 发表
用正则的效率高,还是split效率高呢?
while(){
  /^(.+)\d+(.+)$/;
  $m{$1}=$2;
}

while(($key,$value) = each %m){
        print "$key=>$value\n";
}

__END__
1   a
2   b
3   c

恩 好问题
取决于具体的数据
我原先的测试 ( 对很长的一行取第2列)
结果是 @a = split; 的形式最慢的 reg快于(split)[1] 慢于在 (split /\s+/, $_, 2)[1];
网上也找到过相似的测试 结果不太一样 但总体来说reg的速度相当的快, 即使不是第一也和第一相差不远。

要是取所有的列 还是split快吧。。。。 不好意思没做过比较



QUOTE:
原帖由 machine 于 2008-11-11 10:30 发表
用正则的效率高,还是split效率高呢?
while(){
  /^(.+)\d+(.+)$/;
  $m{$1}=$2;
}

while(($key,$value) = each %m){
        print "$key=>$value\n";
}

__END__
1   a
2   b
3   c

恩 好问题
取决于具体的数据
我原先的测试 ( 对很长的一行取第2列)
结果是 @a = split; 的形式最慢的 reg快于(split)[1] 慢于在 (split /\s+/, $_, 2)[1];
网上也找到过相似的测试 结果不太一样 但总体来说reg的速度相当的快, 即使不是第一也和第一相差不远。

要是取全部的列 还是split快吧。。。。