perl 问题请教



QUOTE:
原帖由 ynchnluiti 于 2008-11-9 14:50 发表

以第一个字段为键值生成散列,第一字段出现次数小于2则输出


可否将其变成一个非 one line的程序块?
我好深入学习一下 one line 是如何来做的:)


QUOTE:
原帖由 wanggd1983 于 2008-11-9 14:57 发表



可否将其变成一个非 one line的程序块?
我好深入学习一下 one line 是如何来做的:)

我也是刚学perl,我觉得应该先把perl基本书过一下。
我正在看perl语言入门第四版。

关于这个程序块,命令的在第9章


QUOTE:
原帖由 wanggd1983 于 2008-11-9 14:57 发表



可否将其变成一个非 one line的程序块?
我好深入学习一下 one line 是如何来做的:)



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

use warnings;
use strict;

my %h;

while (<>) {
    my @F;
    @F = split;
    print if $h{$F[0]}++ < 2;
}

楼上的,我这样写的行不行?现在没环境测试

#!/usr/bin/perl -w

use strict;

$I^ = ".bak";

while(<>)
{
    my @array = split; #split /\s+/, $_;

    if(exist $count{$array[0]})
    {
        $flag += 1;
    }
    else
    {
        $flag = 1;
    }
    if($flag <= 2)
    {
        print ;   #print $_;

    }
}


QUOTE:
原帖由 hr_it 于 2008-11-9 15:13 发表
楼上的,我这样写的行不行?现在没环境测试

#!/usr/bin/perl -w

use strict;

$I^ = ".bak";

while()
{
    my @array = split; #split /\s+/, $_;

    if(exist $count{$array[0]})
    {
  ...

$I^  -> $^I
定义%count, $flag

exsit -> exists

另外未给%count赋值,flag一直为1

这样应该就没问题了

#!/usr/bin/perl -w

use strict;

$^I = ".bak";
my %count;
while(<>)
{
        my @array = split /\s+/, $_;

        if (exists $count{$array[0]})
        {
                $count{$array[0]} += 1;
        }
        else
        {
                %count = ($array[0], 1);
        }
        if ($count{$array[0]} <=2 )
        {
                print ;
        }
}