求助 :排序%(解决)

求助 :排序%(解决)

192.168.1.2
23.2.3.4
...
这样一个ip地址列表。我可以把它放入到哈希结构中吗?我想让它以192来排序
还是有什么别的方法。谢谢

没问题,先split 一下,然后把第一个元素 做为key,整个@作为value。
open (FH,$ARGV[0]);
my %result;
while (<>
  {
my ($a,@b)=split(/\./,$_);
%result=($a=>@b);        
        }
sort keys(%result);
print keys(%result);
close FH

我这样给%赋值是不是不对啊。得不到我想要的结果


QUOTE:
原帖由 shijiang1130 于 2008-4-29 17:48 发表
我这样给%赋值是不是不对啊。得不到我想要的结果

$result{$a}="@b";
""是必须的

谢谢。还是不行。请帮忙参考一下。
open (FH,“>>$ARGV[0]”);
my %result;
while (<>
  {
my ($a,@b)=split(/\./,$_);
$result{$a}="@b";        
        }
sort keys(%result);
print keys(%result);
close FH
打印出来的没有排序。而且原文件也没有改变。


QUOTE:
原帖由 shijiang1130 于 2008-4-30 11:09 发表
谢谢。还是不行。请帮忙参考一下。
open (FH,“>>$ARGV[0]”);
my %result;
while (
  {
my ($a,@b)=split(/\./,$_);
$result{$a}="@b";        
        }
sort keys(%result);
print keys(%result); ...

1.原文件没有改变你自己看看代码,你往原文件里面做过写的操作没?
2.没有排序是因为你sort keys(%result)这个东西一点用都没有,sort的返回值是排序后的数组,但是这个数组你又没有捕获,所以这条语句啥都没有做,
你还能希望它有什么结果呢?
solution:
或者

[Copy to clipboard] [ - ]
CODE:
my @sorted = sort keys %result;
print "@sorted\n";

或者

[Copy to clipboard] [ - ]
CODE:
print sorted keys %result,"\n";



[Copy to clipboard] [ - ]
CODE:
#!/usr/bin/perl
use strict;
use warnings;

my $hash;
while(chomp(my $line=<DATA>)) {
        my ($key, @value) = split /\./,$line;
        $hash->{$key}=[@value];
}

local $"='.';
print "$_.@{$hash->{$_}}\n" foreach sort {$a <=> $b} keys %$hash;

__DATA__
192.168.1.2
23.2.3.4
12.16.13.46
165.128.16.185