请教split函数的使用

也许是我表达的不是很好,你不明白吧,换句话说就是$Phone{$number}等于什么?


QUOTE:
原帖由 jun821 于 2008-12-24 16:44 发表
也许是我表达的不是很好,你不明白吧,换句话说就是$Phone{$number}等于什么?

彻底不知道你说的了。
$Phone{$number} 是散列中的一个元素, 值是你是你刚赋与的$_


QUOTE:
原帖由 jun821 于 2008-12-24 16:44 发表
也许是我表达的不是很好,你不明白吧,换句话说就是$Phone{$number}等于什么?

等于 $_ 的值撒。
我现在就是不知道$_,调试也出错


QUOTE:
原帖由 jun821 于 2008-12-25 11:05 发表
我现在就是不知道$_,调试也出错

用的是while (<>)吗

[Copy to clipboard] [ - ]
CODE:
#!/usr/bin/perl

while (<DATA>) {
    chomp;
    ($number, $mail) = (split(/\s+/,$_))[1,2];
    $Phone{$number} = $_;
    $Email{$mail} = $_;
}

for (keys %Phone) {
    print "$_: $Phone{$_}\n";
}

__DATA__
[email]abc1234@sina.com[/email] 13900001234
[email]abc1334@sina.com[/email] 13900001334
[email]abc1434@sina.com[/email] 13900001434
$ ./split
13900001234: [email]abc1234@sina.com[/email] 13900001234
13900001434: [email]abc1434@sina.com[/email] 13900001434
13900001334: [email]abc1334@sina.com[/email] 13900001334

哈哈,对就是这样的,为什么“print "$Phone{number}”打印不出结果了,或者这样“print "$mail”也打印不出结果,是哪里我理解错了嘛!


QUOTE:
原帖由 jun821 于 2008-12-25 11:13 发表
哈哈,对就是这样的,为什么“print "$Phone{number}”打印不出结果了,或者这样“print "$mail”也打印不出结果,是哪里我理解错了嘛!

$Phone{number}取得是键值为number的元素的值,

应该是$Phone{$number}
#! perl
open(PH,"F:/pop/1.txt" or die "Cannot open 1.txt!\n";
while(<H>{
chomp;
($number,mail)=(split(/\s+/,$_))[1,2]
$Phone{$number}=$_;
$Email{$mail}=$_;
}
print "$Phone{$number}\n";


好像还是出错了。

1.txt(Smith,john  (24-555-9430  js@163.com
Hunter,Apr  (24-555-9431  zs@163.com
Ching,Lind  (24-555-9432  ds@163.com
Jeter,Dave  (24-555-9433  ss@163.com


QUOTE:
原帖由 jun821 于 2008-12-25 11:23 发表
#! perl
open(PH,"F:/pop/1.txt" or die "Cannot open 1.txt!\n";
while(){
chomp;
($number,mail)=(split(/\s+/,$_))[1,2]
$Phone{$number}=$_;
$Email{$mail}=$_;
}
print "$Phone{$number}\n";
...



QUOTE:
cat 1.txt
Smith,john  (24-555-9430  js@163.com)
Hunter,Apr  (24-555-9431  zs@163.com)
Ching,Lind  (24-555-9432  ds@163.com)
Jeter,Dave  (24-555-9433  ss@163.com)

文件路径跟你的不一样

[Copy to clipboard] [ - ]
CODE:
#!/usr/bin/perl

open (PH, "1.txt") or die "Cannot open 1.txt!\n";

while (<PH>) {
    chomp;

    ($number,$mail)=(split(/\s+[()]?/,$_))[1,2];
    $Phone{$number}=$_;
    $Email{$mail}=$_;
}

close PH;
print "\$number:\t$number\n";
print "\$Phone{\$number}:$Phone{$number}\n";



QUOTE:
./ph
$number:        24-555-9433
$Phone{$number}:Jeter,Dave  (24-555-9433  ss@163.com)



QUOTE:
原帖由 jun821 于 2008-12-25 11:23 发表
#! perl
open(PH,"F:/pop/1.txt" or die "Cannot open 1.txt!\n";
while(){
chomp;
($number,mail)=(split(/\s+/,$_))[1,2]
$Phone{$number}=$_;
$Email{$mail}=$_;
}
print "$Phone{$number}\n";
...

在循环外,$number是最后一个记录的。如果文件最后一行是空行就有问题