LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1484|回复: 6

~ /^[\.]/ && next; 是什么意思?【新人发贴求教】

[复制链接]
发表于 2006-8-10 18:24:58 | 显示全部楼层 |阅读模式
my $bindlogdir     =       "xxxx/log";
opendir(DIR, "$bindlogdir") || die "Cannot open dir $bindlogdir\n";
my @files = readdir(DIR);

foreach my $filename (@files)
{
        $filename =~ /^[\.]/ && next;
        print $filename;
}

如上。这句话用来答印文件名。

但是我看不懂“~ /^[\.]/ && next”是什么意思,那位明白能告诉一下我么;

我老是看到一堆符号这么写就头大了。。。。这是哪门子的写法呢?
发表于 2006-8-11 16:24:29 | 显示全部楼层
Post by strchi
my $bindlogdir     =       "xxxx/log";
opendir(DIR, "$bindlogdir") || die "Cannot open dir $bindlogdir\n";
my @files = readdir(DIR);

foreach my $filename (@files)
{
        $filename =~ /^[\.]/ && next;
        print $filename;
}

如上。这句话用来答印文件名。

但是我看不懂“~ /^[\.]/ && next”是什么意思,那位明白能告诉一下我么;

我老是看到一堆符号这么写就头大了。。。。这是哪门子的写法呢?
=~应该连在一起看,是模式匹配的操作符.后面的/^[\.]/中的两个/中间应该是匹配的字符,首字符是^应该是串首的意思,后面的[\.]应该是匹配字符,其中\是转义字符,所以这一句应该是以.为首字符的字符串,&&next是:&&是与的意思,next是否是循环语句?
上面是我的分析,我觉得这句好象有点毛病(也许我是错的),唉我也是刚学perl,基于没法入门...
回复 支持 反对

使用道具 举报

发表于 2006-8-13 17:17:05 | 显示全部楼层
判断是否是目录,是的话就执行next命令,就是查找下一个列表的值是否匹配,匹配就是一个文件而不是目录。打印出来。
学perl不学正则是不行的,正则是*nix的精华。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-8-23 15:06:04 | 显示全部楼层
非常感谢 brown_hwy 和 cg111 的回复。大体明白这句话的意思了。
我会留意学习一下正则的。
回复 支持 反对

使用道具 举报

发表于 2006-9-6 16:11:23 | 显示全部楼层
判断是否正则匹配语句 =~ ... && ...
条件是一个正则表达式/^[\.]/
/是分界,两个/之间是正则表达式内容,以字符串中.开头为成立条件

*nix中,.开头的文件为隐藏文件,不应该被显示出来
结合整个循环,意思就是,读取一个文件的名字,如果他是隐藏文件就跳过,否则就显示!
不应该如cg111所说,是判断是否是目录。
表达式中[]应该是多余了,这句话等价于/^\./
回复 支持 反对

使用道具 举报

发表于 2006-9-7 11:18:54 | 显示全部楼层
补充一下:

其实如果用 PHP 的话就可以这样写,这就清楚很多了

foreach ($filename as $array_file)
{
if (ereg('^\.', $filename))
   continue;
echo $filename;
}

不过似乎有一个问题 . 开头的不一定是一个文件,而且也有可能是一个目录。并且这段代码只能适合 *ix 下,虽然 windows 也能运行不过,Windows 没有 . 开头就是隐藏文件的说法
回复 支持 反对

使用道具 举报

发表于 2006-9-7 11:34:30 | 显示全部楼层
Post by AMD-K6
补充一下:

其实如果用 PHP 的话就可以这样写,这就清楚很多了

foreach ($filename as $array_file)
{
if (ereg('^\.', $filename))
   continue;
echo $filename;
}

不过似乎有一个问题 . 开头的不一定是一个文件,而且也有可能是一个目录。并且这段代码只能适合 *ix 下,虽然 windows 也能运行不过,Windows 没有 . 开头就是隐藏文件的说法



我感觉php里面perg*函数比ereg*函数快啊!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表