readdir函数返回值是空串

readdir函数返回值是空串

请教一下,首先使用opendir打开目录句柄,成功。
接着读取目录中的文件名集合,可是得到的却是和目录下内容等数量的空串,即 文件名 eq '';

Code:

opendir( DIR, $directory ) or die "open dir error";

    my $number = 0;
    while(defined($name = readdir (DIR))) {
            $number++;
            if($name eq "") {
                    print "Value -$name* is null string."
            }
            print "Loop $number-->$name**\n";
            next if $name eq "." || $name eq "..";
            next unless $name =~ /(.*)\.lip$/;       
           
            push @names, $name;
    }

如果目录下有5个文件,那么读出的是7项''。为何无法读到文件名呢?

哦,明白了,你是说你的@names为什么为空是吧?
你的这行:

QUOTE:
next unless $name =~ /(.*)\.lip$/;  

把下面的push都无效了……说明你的目录里没有.lip结尾的文件啊。

我这里的测试结果是你print "Loop..."那里完全正常,包括了.. 和 .
然后你的@names里面如果都为空,是否因为next unless $name =~ /(.*)\.lip$/;   
把该句注释掉,才能运行push,你尝试检查你的正则表达式
next unless $name =~ /(.*)\.lip$/;

跳过不是.lip结尾的文件?

写成 next if !~ 多好.....
嗯,貌似只是单个$name,用next if $name !~ /\.lip$/就行
而且按我理解楼主的意思,大概这样写才能得到你想要的

[Copy to clipboard] [ - ]
CODE:
print "Loop $number-->$name**\n";
          next if $name eq "." || $name eq "..";
          push @names,$name if $name !~ /\.lip$/;        

不好意思,我没有描述明白。
程序的意思是要收集目录中以".lip"结尾的文件名字,实际目录中包含有这样的文件。
问题在于,每次
$name = readdir (DIR)
语句的执行结果都是''

麻烦帮忙分析下。谢谢。
这里启动了apache,通过下列方式访问Perl文件
例如: http://localhost/test/mytest.pl.

如果直接在Linux下执行,会成功。然而,通过http访问,会失败。
权限问题吧


QUOTE:
原帖由 marscld 于 2007-9-26 19:45 发表
不好意思,我没有描述明白。
程序的意思是要收集目录中以".lip"结尾的文件名字,实际目录中包含有这样的文件。
问题在于,每次
$name = readdir (DIR)
语句的执行结果都是''

麻烦帮忙分析下。谢谢。

不好意思,对于网络的,我不懂,请教其他强人

至于你的结果为什么不对,我很困惑,因为我用自己电脑测试是通过的,结果都显示了的
如果你要收集.lip结尾的,只需要把我写的那个 push @names,$name if $name !~ /\.lip$/;
改成 push @names,$name if $name =~ /\.lip$/;
也就是!~改成=~就可以了

$directory ,你那里不知道会不会出在这个上面,我测试的时候,使用了"/."来代替你的$directory
其他爱莫能助了
多谢了