BBS.ChinaUnix.net
首页 | 新闻 | Linux | FreeBSD | AIX | Windows | 博客 | 论坛 | 存储 | 网络 | 人才 | Wiki | 资料 | 读书 | 手册 | 下载 | 空间 | 搜索
  免费注册 | 忘记密码 | 会员登录 | 搜索 | 帮助 



local $^I = '.bac' 中$^是什么意思!
首页 » 论坛 » Perl »  
[打印] [订阅] [收藏] [本帖文本页] [推荐此主题给朋友,立即获积分]
huanghaojie   帅哥
天使



CU编号: 209751
注册:2004-12-22
最后登录: 2009-07-04
帖子:1165
精华:1

可用积分:2102 (小富即安)
信誉积分:125
专家积分:10 (本版:0)
空间积分:0
推广积分:0

状态:...离线...

[个人空间] [短信] [博客]


1楼 发表于 2009-1-6 13:44 

# cat  /home/jiangt/perl/file.txt

192.168.1.1
192.168.1.1
200.1.1.2
201.43.43.1
10.0.0.1
200.1.1.2
192.168.1.1


#!/usr/bin/perl -v

use strict;
use warnings;

my $file = '/home/jiangt/perl/file.txt';
my %seen = ();
{
  local @ARGV = ($file);
  local $^I = '.bac';
  while(<>){
     $seen{$_}++;
     next if $seen{$_} > 1;
     print;
  }
}
foreach my $keys  ( sort {$seen{$b} <=> $seen{$a}} keys %seen) {
  print "$keys = $seen{$keys}";
}



您对本贴的看法:鲜花[0] 臭蛋[0]
ly5066113   帅哥 (Tim)
法师


CU奥运火炬传递手2008
CU编号: 465018
注册:2006-9-13
最后登录: 2009-07-03
帖子:5298
精华:0

可用积分:22062 (巨富豪门)
信誉积分:120
专家积分:617 (本版:10)
空间积分:0
推广积分:132

来自:长春
状态:...离线...

[个人空间] [短信] [博客]


2楼 发表于 2009-1-6 13:46 




您对本贴的看法:鲜花[0] 臭蛋[0]

__________________________________

记住该记住的,忘记该忘记的。改变能改变的,接受不能改变的。
版主 MMMIX
广告杀手-法王




CU编号: 342513
注册:2005-11-28
最后登录: 2009-07-04
帖子:13379
精华:0

可用积分:39990 (巨富豪门)
信誉积分:100
专家积分:229 (本版:45)
空间积分:0
推广积分:0

状态:...保密...

[个人空间] [短信] [博客]


3楼 发表于 2009-1-6 13:53 

$^I 是 Perl 预定义的特殊变量,见 perlvar 对其的描述。



您对本贴的看法:鲜花[0] 臭蛋[0]

__________________________________

天地不仁, 以万物为刍狗!
huanghaojie   帅哥
天使



CU编号: 209751
注册:2004-12-22
最后登录: 2009-07-04
帖子:1165
精华:1

可用积分:2102 (小富即安)
信誉积分:125
专家积分:10 (本版:0)
空间积分:0
推广积分:0

状态:...离线...

[个人空间] [短信] [博客]


4楼 发表于 2009-1-6 14:23 

$^I     原地编辑扩展的当前值。设置为 "undef" 时关闭原地编辑。(助记:-i
            开关的值。)
慢慢理解中



您对本贴的看法:鲜花[0] 臭蛋[0]
版主 MMMIX
广告杀手-法王




CU编号: 342513
注册:2005-11-28
最后登录: 2009-07-04
帖子:13379
精华:0

可用积分:39990 (巨富豪门)
信誉积分:100
专家积分:229 (本版:45)
空间积分:0
推广积分:0

状态:...保密...

[个人空间] [短信] [博客]


5楼 发表于 2009-1-6 14:48 



QUOTE:
原帖由 huanghaojie 于 2009-1-6 14:23 发表
$^I     原地编辑扩展的当前值。设置为 "undef" 时关闭原地编辑。(助记:-i
            开关的值。)
慢慢理解中

看看 perlrun 中对 -i 的描述相信会有帮助



您对本贴的看法:鲜花[0] 臭蛋[0]

__________________________________

天地不仁, 以万物为刍狗!
huanghaojie   帅哥
天使



CU编号: 209751
注册:2004-12-22
最后登录: 2009-07-04
帖子:1165
精华:1

可用积分:2102 (小富即安)
信誉积分:125
专家积分:10 (本版:0)
空间积分:0
推广积分:0

状态:...离线...

[个人空间] [短信] [博客]


6楼 发表于 2009-1-6 15:57 



QUOTE:
原帖由 MMMIX 于 2009-1-6 14:48 发表

看看 perlrun 中对 -i 的描述相信会有帮助

去看看, 能大概描述一下这段程序吗



您对本贴的看法:鲜花[0] 臭蛋[0]
版主 MMMIX
广告杀手-法王




CU编号: 342513
注册:2005-11-28
最后登录: 2009-07-04
帖子:13379
精华:0

可用积分:39990 (巨富豪门)
信誉积分:100
专家积分:229 (本版:45)
空间积分:0
推广积分:0

状态:...保密...

[个人空间] [短信] [博客]


7楼 发表于 2009-1-6 16:04 



QUOTE:
原帖由 huanghaojie 于 2009-1-6 15:57 发表


去看看, 能大概描述一下这段程序吗

直接说你什么地方不理解吧



您对本贴的看法:鲜花[0] 臭蛋[0]

__________________________________

天地不仁, 以万物为刍狗!
huanghaojie   帅哥
天使



CU编号: 209751
注册:2004-12-22
最后登录: 2009-07-04
帖子:1165
精华:1

可用积分:2102 (小富即安)
信誉积分:125
专家积分:10 (本版:0)
空间积分:0
推广积分:0

状态:...离线...

[个人空间] [短信] [博客]


8楼 发表于 2009-1-6 16:08 

local @ARGV = ($file);
  local $^I = '.bac';
  while(<>){
     $seen{$_}++;
     next if $seen{$_} > 1;
     print;

1.这段不太清楚
2.我把local 换成my行吗
3.($file) 括号不要行吗
4.



您对本贴的看法:鲜花[0] 臭蛋[0]
版主 MMMIX
广告杀手-法王




CU编号: 342513
注册:2005-11-28
最后登录: 2009-07-04
帖子:13379
精华:0

可用积分:39990 (巨富豪门)
信誉积分:100
专家积分:229 (本版:45)
空间积分:0
推广积分:0

状态:...保密...

[个人空间] [短信] [博客]


9楼 发表于 2009-1-6 17:13 



QUOTE:
原帖由 huanghaojie 于 2009-1-6 16:08 发表
local @ARGV = ($file);
  local $^I = '.bac';
  while(){
     $seen{$_}++;
     next if $seen{$_} > 1;
     print;

1.这段不太清楚

具体什么地方不清楚?

QUOTE:
2.我把local 换成my行吗

不行。用 my 会创建一个局部变量,不会对 $^I 这些全局变量造成影响。

详见 perlsub 中的描述。

QUOTE:
3.($file) 括号不要行吗

可以。在 perldata 的 List value constructors 中有描述。



您对本贴的看法:鲜花[0] 臭蛋[0]

__________________________________

天地不仁, 以万物为刍狗!
huanghaojie   帅哥
天使



CU编号: 209751
注册:2004-12-22
最后登录: 2009-07-04
帖子:1165
精华:1

可用积分:2102 (小富即安)
信誉积分:125
专家积分:10 (本版:0)
空间积分:0
推广积分:0

状态:...离线...

[个人空间] [短信] [博客]


10楼 发表于 2009-1-6 20:40 



QUOTE:
原帖由 MMMIX 于 2009-1-6 17:13 发表

具体什么地方不清楚?

不行。用 my 会创建一个局部变量,不会对 $^I 这些全局变量造成影响。

详见 perlsub 中的描述。

可以。在 perldata 的 List value constructors 中有描述。

搞明白了,但有一个地方有点不清楚, 就是print 这个光秃秃的print 打印$_到file.txt吗,


还有一个地方就是最后一句
foreach my $keys  ( sort {$seen{$b} <=> $seen{$a}} keys %seen) {
  print "$keys = $seen{$keys}\n";
}

打印出来的为什么是这样
192.168.1.1
= 3
200.1.1.2
= 2
201.43.43.1
= 1
10.0.0.1
= 1

为什么不是下面那样
192.168.1.1  = 3
200.1.1.2  = 2
201.43.43.1 = 1
10.0.0.1  = 1

[ 本帖最后由 huanghaojie 于 2009-1-6 21:31 编辑 ]



您对本贴的看法:鲜花[0] 臭蛋[0]

首页 » 论坛 » Perl »


 


Copyright © 2001-2009 ChinaUnix.net All Rights Reserved     联系我们:

感谢所有关心和支持过ChinaUnix的朋友们    转载本站内容请注明原作者名及出处

京ICP证041476号


清除 Cookies - ChinaUnix - Archiver - WAP - TOP

Processed in 0.068805 second(s), 4 queries , Gzip enabled