免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2185 | 回复: 8
打印 上一主题 下一主题

高手看一下,这个程序错哪了? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-10-21 18:05 |只看该作者 |倒序浏览
#!/usr/bin/perl -w

use strict;
while(<>){
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;foreach(split){
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;my $total++;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;next if/\W/;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;my $valid++;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;my $count{$_}++;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
}
print "total things=$total,valid words=$valid\n";
foreach $word(sort keys %count){
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print "$word was seen $count{$word} time.\n";
}


执行的时候报这样的错误:

syntax error at ./danci line 8, near "$count{"
syntax error at ./danci line 8, near "++;"
syntax error at ./danci line 10, near "}"
Execution of ./danci aborted due to compilation errors.

论坛徽章:
0
2 [报告]
发表于 2008-10-21 18:32 |只看该作者
貌似my $count{$_}++; 声明变量里面不能带++

论坛徽章:
0
3 [报告]
发表于 2008-10-21 18:32 |只看该作者

回复 #1 tony_413 的帖子

变量范围有问题。

论坛徽章:
0
4 [报告]
发表于 2008-10-21 18:41 |只看该作者
是啊 my $total++;这都没报错,那么还是该先声明散列,再++,
错在不该用my来修饰散列的成员?

论坛徽章:
3
戌狗
日期:2014-09-10 17:07:162015年辞旧岁徽章
日期:2015-03-03 16:54:15wusuopu
日期:2016-06-17 17:43:45
5 [报告]
发表于 2008-10-21 18:52 |只看该作者
原帖由 dajun 于 2008-10-21 18:41 发表
是啊 my $total++;这都没报错,那么还是该先声明散列,再++,
错在不该用my来修饰散列的成员?

应该是这个

论坛徽章:
0
6 [报告]
发表于 2008-10-21 20:23 |只看该作者
不声明的散列 好像不能直接调用成员吧

论坛徽章:
0
7 [报告]
发表于 2008-10-21 20:37 |只看该作者
foreach ( ... ) {
    ...
    my $count{$_}++;
    ...
}

楼主显然还不太明白 my 的用法, 你这样写法在foreach{}循环外面是访问不了 %count 的, 循环一完 %count 这个变量就被销毁了

论坛徽章:
0
8 [报告]
发表于 2008-10-21 20:43 |只看该作者
改成这样应该就不会报错了:
#!/usr/bin/perl -w


use strict;

my $total;
my $valid;
my %count;

while(<>){
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;foreach my $i ( split ){
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$total++;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;next if/\W/;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$valid++;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$count{$i}++;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
}
print "total things=$total,valid words=$valid\n";
foreach my $word(sort keys %count){
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print "$word was seen $count{$word} time.\n";
}

论坛徽章:
0
9 [报告]
发表于 2008-10-22 09:58 |只看该作者
谢谢楼上的各位。

foreach my $i ( split ){
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$total++;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;next if/\W/;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$valid++;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$count{$i}++;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}


ls的foreach控制的是$i变量,而if控制的是默认变量$_。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP