请问对这两行的理解?

请问对这两行的理解?

my $CMDNAME = ($0 =~ m#.*/(.*)$#) ? $1
                                                              : $0;

这里的#  #,也就是/ /的意思。即

my $CMDNAME = ($0 =~ m/.*/(.*)$/) ? $1
                                                           : $0;

对于CMD后面的参数是怎样进行处理的?
(m -- 多行也包括在内)
($ -- 一直到命令行的行尾)
((.*) -- 也就是 $1)
但是和前面的部分连在一起,.*/(.*)  -- 是什么意思啊?还有那两个等号又怎么理解?
.*/(.*)  表示用/分开,你这里用#。。。#代替了/,自然而然,/将不被解释,看下面的例子,将明白什么意思了:
$0="hel/ld/mm" ;
$com=($0=~m#.*/(.*)$#)?$1: $0;
print $com;

$0="hel/ldmm" ;
$com=($0=~m#.*/(.*)$#)?$1: $0;
print $com;

$0="helldmm" ;
$com=($0=~m#.*/(.*)$#)?$1: $0;
print $com;


输出将分别是mm
         ldmm
         helldmm
$0是脚本名字
这类似于实现shell中的basename功能
比如你调用脚本是通过绝对路径调用的
/xx/yy/zz
则结果$COMNAME = zz
反之,你如果直接打zz,则匹配不成功,所以
$COMNAME = $0; ($0 =zz)
所以还是得到$COMNAME=zz


QUOTE:
原帖由 whn3375 于 2008-5-23 14:54 发表
my $CMDNAME = ($0 =~ m#.*/(.*)$#) ? $1
                                                              : $0;

这里的#  #,也就是/ /的意思。即

my $CMDNAME = ($0 =~ m/.*/(.*)$/) ? $1
                                                           : $0;

对于CMD后面的参数是怎样进行处理的?
(m -- 多行也包括在内) # 这里m是match的缩写,表示模式匹配,不表示多行
($ -- 一直到命令行的行尾)
((.*) -- 也就是 $1)
但是和前面的部分连在一起,.*/(.*)  -- 是什么意思啊?还有那两个等号又怎么理解?

第一个=用来赋值,第二个=和~一起即=~用来改变匹配对象,.*/(.*)的解释看楼上几位的。
c语言里的? : ;啊 ,判断$0里面有没有/, 如果有就取出最后一个/后面的字符赋给command
如果没有就将$0整个赋给command