免费注册 查看新帖 |

Chinaunix

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

请教opendir和readdir问题 [复制链接]

himalaya 该用户已被删除
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-06-01 20:56 |只看该作者 |倒序浏览
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
2 [报告]
发表于 2004-06-01 23:47 |只看该作者

请教opendir和readdir问题


  1. #! /usr/bin/perl

  2. my $dir = "/some/dir";
  3. opendir(DIR, $dir);
  4. while(defined(my $file = readdir(DIR))){
  5. if(-d "$dir/$file"){      # '-d $file'仅仅只是对当前目录下的$file进行测试
  6. print $file;
  7. }
  8. }
  9. closedir(DIR);
复制代码


如果你看看perldoc -f readdir,你会发现
...If you're planning to filetest the return values out of a
"readdir", you'd better prepend the directory in question.
Otherwise, because we didn't "chdir" there, it would have been
testing the wrong file
...

论坛徽章:
0
3 [报告]
发表于 2004-06-02 03:03 |只看该作者

请教opendir和readdir问题

while(defined(my $file = readdir(DIR))){  

这里的 $file 用 my 声明后就是本地变量。 while 循环里不知道 $file 是什么。

如果你在程序里使用  use warnings (-w)  和 use strict, 就有错误提示 : Use of uninitialized value

所以, 最好在你的每个perl 程序里加上 -w 和 use strict. 这就好像是有人在帮你 调试程序,省了很多时间和精力。

论坛徽章:
0
4 [报告]
发表于 2004-06-02 17:58 |只看该作者

请教opendir和readdir问题

原帖由 "Qiang" 发表:
while(defined(my $file = readdir(DIR))){  

这里的 $file 用 my 声明后就是本地变量。 while 循环里不知道 $file 是什么。

如果你在程序里使用  use warnings (-w)  和 use strict, 就有错误提示 : Use of u..........


楼上说的不对阿呵呵,(my $file=readdir(DIR))中$file的作用域在这个括号范围内,传给while的是“defined(my $file = readdir(DIR))”,这个与用不用my定义无关,至于为何会有错误提示,那是因为其他的变量没有定义过。
该段程序的问题在二楼已经回复过了,调试一下就知道了呵呵
himalaya 该用户已被删除
5 [报告]
发表于 2004-06-02 19:57 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
6 [报告]
发表于 2004-06-03 07:33 |只看该作者

请教opendir和readdir问题

原帖由 "bytewolf" 发表:


楼上说的不对阿呵呵,(my $file=readdir(DIR))中$file的作用域在这个括号范围内,传给while的是“defined(my $file = readdir(DIR))”,这个与用不用my定义无关,至于为何会有错误提示,那是因为其他的变量没有定..........


readdir 的使用确实有问题. 我没有注意到.

不过就算 readdir 的问题解决,程序还是不对.my $file 在 while 里声明而且在 loop 里使用, 但 loop 里并不知道 $file 是什么. 比较下面的例子就知道了.

D:\>;perl -e "opendir(D,'.');print $f while(defined(my $f=readdir(D)))"

D:\>;perl -e "my $a;opendir(D,'.');print $f while(defined($f=readdir(D)))"

论坛徽章:
0
7 [报告]
发表于 2004-06-03 08:08 |只看该作者

请教opendir和readdir问题

原帖由 "bytewolf" 发表:


楼上说的不对阿呵呵,(my $file=readdir(DIR))中$file的作用域在这个括号范围内,传给while的是“defined(my $file = readdir(DIR))”,这个与用不用my定义无关,至于为何会有错误提示,那是因为其他的变量没有定..........
my $file的作用域在while循环内部,也就是{}内。在perl中 {}就是一个作用域,当然是使用了my声明后的。

论坛徽章:
0
8 [报告]
发表于 2004-06-03 08:30 |只看该作者

请教opendir和readdir问题

my bad.

D:\>;perl -e "opendir(D,'.');while(defined(my $f=readdir(D))) {print $f }"

一直都用同样的方法在 foreach 上.. 很少使用 while. 谢谢纠正

论坛徽章:
0
9 [报告]
发表于 2004-06-03 13:13 |只看该作者

请教opendir和readdir问题

[quote]原帖由 "bloves"]y $file的作用域在while循环内部,也就是{}内。在perl中 {}就是一个作用域,当然是使用了my声明后的。[/quote 发表:


我上面的贴子没说错阿,$file的作用域是在那对括号中阿,楼主所需解决的问题也与用不用my定义无关阿.......

论坛徽章:
0
10 [报告]
发表于 2004-07-01 23:46 |只看该作者

请教opendir和readdir问题

和楼主的程序一样,我的错在哪里呢?

  1. n# perl opendir_readdir
  2. Undefined subroutine &main::define called at opendir_readdir line
  3. 4.
  4. # cat -n opendir_readdir
  5.      1  #!/usr/bin/perl -w
  6.      2  my $dir="/forum";
  7.      3  opendir(DIR,$dir);
  8.      4  while(define(my $file=readdir(DIR))) {
  9.      5          if(-d $file) {
  10.      6                  print $file;
  11.      7          }
  12.      8  }
  13.      9  closedir(DIR);
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP