+ -
当前位置:首页 → 问答吧 → 请问哪里错了?求助

请问哪里错了?求助

时间:2010-12-22

来源:互联网

perl语言入门里模块的内容很少内容都是是带过的,看得 不怎么懂,参数什么的不太会用。
参考前辈写了一段清除目录下的.tmp文件的程序,请问哪里错了?

#!/usr/bin/perl
use strict;
use File::Find;
sub wanted{
if(-f $File::Find::name){
  if($File::Find::name=#\.tmp#i){
    print"Removing $File::Find::name\n";
    unlink $File::Find::name;
    }
  }
}
find(\$wanted,'/usr/local/hup_perl/tmpfile');

#我的疑问:
1.File::Find::name ,find ---等这几项大小写是规范呢还是必须这么写的?区别大小写吗?
2.Find是模块名,name和find 是这个模块能调用的方法吗?
3.参数 sub wanted 这2个是什么意思啊?以及后面的find(\$wanted,'')?

4.以上编译出错了,提示:
syntax error at ./test line 7, near ""Removing $File::Find::name\n";"
Unmatched right curly bracket at ./test line 11, at end of line
syntax error at ./test line 11, near "}"
Execution of ./test aborted due to compilation errors.

作者: 穆赫兰道   发布时间: 2010-12-22

这里
  1. find(\$wanted,'/usr/local/hup_perl/tmpfile');
复制代码
应该是
  1. find(\&wanted,'/usr/local/hup_perl/tmpfile');
复制代码

作者: scrit   发布时间: 2010-12-22

本帖最后由 scrit 于 2010-12-22 17:05 编辑

刚才试了一下应该是这样的
  1. #!/usr/bin/perl
  2. use strict;
  3. use File::Find;
  4. sub wanted{
  5. if(-f $File::Find::name){
  6.   if($File::Find::name=/\.tmp/i){
  7.     print"Removing $File::Find::name\n";
  8.     unlink $File::Find::name;
  9.     }
  10.   }
  11. }
  12. find(\&wanted,'/usr/local/hup_perl/tmpfile');
复制代码
你原来的这样写是不对的
if($File::Find::name=#\.tmp#i){
应该这样
if($File::Find::name=/\.tmp/i){

关于你的疑问

1.File::Find::name ,find ---等这几项大小写是规范呢还是必须这么写的?区别大小写吗?
   区分大小的。是规范必须这样写
2.Find是模块名,name和find 是这个模块能调用的方法吗?
    模块名是 File::Find   
3.参数 sub wanted 这2个是什么意思啊?以及后面的find(\$wanted,'')?
    sub wanted这里是定义一个函数,  后面find(\&wanted,'')  是调用这个函数


这是我的个人理解,如有错误请指正

作者: scrit   发布时间: 2010-12-22

应该是=~
print后最好有空格

作者: yybmsrs   发布时间: 2010-12-22

谢谢各位

我有3个错误。
1.##这里的//匹配,不是定界符吗?不是可以随便换的吗?为什么一定要用//啊?

2.find(\$)这里写错了,是&

3.还有个问题你们没指出来,=~少了~,会显示removing 1 ;加了~才正确。

作者: 穆赫兰道   发布时间: 2010-12-22

sub 是定义函数,我晕,学了又没记住,谢谢,我知道了。

作者: 穆赫兰道   发布时间: 2010-12-22

是不是正则匹配不能用定界符的,我刚翻了书,一个地方都没看到,都是//

而s///里是可以用定界符的,s###这样子写可以。


再次感谢各位,问题已解决。

作者: 穆赫兰道   发布时间: 2010-12-22

正则表达式可以用 //, m//, m## 等等

作者: zhlong8   发布时间: 2010-12-22