偶不理解这句delete $total{substr($ip,rindex($ip,'.')+1)};

偶不理解这句delete $total{substr($ip,rindex($ip,'.')+1)};

实现:从一IP地址清单中整理出未被分配的IP地址(192.168.1.1---192.168.1.254)
vincentn 和qyzj 大哥给出的程序,如下:
#!/usr/bin/perl -w
use strict;
my %total=map {$_,1} (1..254);
open(DATA,"< ip.txt") || die("open file err");
while(my $line=<DATA>){
        my ($ip)=$line=~/\s+\*(.+)\*/;
        delete $total{substr($ip,rindex($ip,'.')+1)};
        print "yes:\t$ip\n";
}
foreach(sort {$a<=>$b} keys %total){
        print "no:\t192.168.1.$_\n";
}
1.substr($ip,rindex('.',$ip))得到IP最后一段数字,如192.168.1.254中的254;
2.经测试,$total{254}等于1,其实上面程序中$total{1},$total{2}....$total{254}均等于1;
3.那么, delete $total{substr($ip,rindex($ip,'.')+1)};应该等效于delete 1;这删除的是什么呢?看不明白啊!关于rindex,substr,map,delete内容,偶都在大骆驼上查阅了,基本都了解了,但......
请大家指教!麻烦详细点,谢谢.


就是删掉 hash 中的一项嘛
老大,你就看看我上面的3个问题,讲详细点嘛!
delete $total{substr($ip,rindex($ip,'.')+1)};帮拆开具体分析下这句吧.
substr($ip,rindex($ip,'.')+1)表示某个IP地址中最后一段数字.
delete $total {最后一段数字}这表示的是什么嘛?
请指教啦!呵呵
1,2 你把大骆驼上关于substr的定义和rindex的定义列出来给大家,当然也是给你自己
3 那个是删除%tatal这个hash结构中的某一对值,包括$key和对应的$value,而不只是删除$value
谢谢perljoker大哥的指教:
---------------------那个是删除%tatal这个hash结构中的某一对值,包括$key和对应的$value,而不只是删除$value.
                           ----------------我明白了
引自大骆驼:"下面的本机例子低效地删除所有 %hash 中的值:


   foreach $key (keys %hash) {
      delete $hash{$key};
   }下面这个一样:


    delete @hash{keys %hash};"
> delete $total {最后一段数字}这表示的是什么嘛?
perldoc -f delete

路要自己走,饭要自己吃,学习还是很私人的一件事。
碰到问题可以交流一下,不过最基本的 Perl 命令的用法,
还是先查查文档和手册吧。
恩,flw老大讲的有道理!
偶太心急了,总感觉学的进度太慢,所以一有问题,还没怎么深入研究就发帖求教了!这样来的快.
谢谢,记住了,呵呵!
> 这样来的快.
去的也快

结果什么都没落下