请教一下

请教一下

请问一下,下面这句是什么意思

$logdir =~ s#/([^/]+)$##;

刚学PERL,在看别人的代码,怕改错了,请教一下
这是一条正则表达式。其作用是删除字串变量$logdir中从最后一个/开始(包括)至字符串结尾的所有内容,提取出该字串所包含的地址。
例如,如果有字串$logdir="/usr/bin/perl";的话,经过正则式替换处理后,会变成"/usr/bin".
这里用s#old#new#  通常我们用s/old/new/

/([^/]+)$ 这个是甚么意思? $应该是锚定吧!
这个故事充分说明了,
叫你们不要滥用正则表达式,

File::Basename;
$logdir = basename $logdir;

不挺好的嘛。看着多清楚啊。
楼上已经有解释了
意思就是从最后一个/到行尾的所有内容  [^/]表示非"/"


QUOTE:
原帖由 zhasm 于 2008-8-13 09:14 发表
这是一条正则表达式。其作用是删除字串变量$logdir中从最后一个/开始(包括)至字符串结尾的所有内容,提取出该字串所包含的地址。
例如,如果有字串$logdir="/usr/bin/perl";的话,经过正则式替换处理后,会变 ...

啊,原来是这样的,十分感谢!
哦 茅舍顿开!


QUOTE:
原帖由 flw 于 2008-8-13 09:56 发表
这个故事充分说明了,
叫你们不要滥用正则表达式,

File::Basename;
$logdir = basename $logdir;

不挺好的嘛。看着多清楚啊。

大家应该感谢FLW给出了现成的命令 他总能给出更好的 :)
只是在这个题目里 $LOGDIR = dirname $LOGDIR
版主说的对