[D]在Perl里,=~和||=算式是什么意思?该如何处理

[D]在Perl里,=~和||=算式是什么意思?
$path1 =~ m|^((?:/\w+)*/)(\w*)(\.\w+)?$|;

$dispatch1 ||= 'index';

求解释以上两算式的意思或给出参考資料,书里没找到。
--------------------
Double行动:
原帖分数:40
加分:40






------解决方案--------------------
=~是正则匹配运算符,当左操作数符合右操作数的正则表达式时返回非false值(含义比较广泛)。
具体你可以接收一下返回值,看看。

第二个是或等赋值运算符。表示,如果$dispatch1为非false,那么$dispatch1还是$dispatch1,否则,$dispatch1被赋值为index。


------解决方案--------------------
1. 
?:是Conditional operator
$path1 =~ m|^((?:/\w+)*/)(\w*)(\.\w+)?$|;
比如它可以匹配:my $path1 = "Jack;abc.list";

2.
$dispatch1 ||= 'index'; 相当于下面的含义:
if ( not ($dispatch1) ) {
$dispatch1 = 'index';
}
------解决方案--------------------
Perl code
my $line="/abc/def/ghi.pl";
my @array=$line=~m|^((?:/\w+)*/)(\w*)(\.\w+)?$|;
print("@array\n");

------解决方案--------------------
关于第二个表达式。后面有*的就可有无,先不必看它,主要分析开始的匹配,由里向外分析,*前面的可以暂时不管,因为*前面的匹配时可有可无,所以里面的括号可不管,*后面是个/,外面的括号有个开头标符^,表明必须是以/开头的,?前面的也可以先不管,理由同*,所以最简单的结果就是匹配/.再看/前面*匹配的括号里是字符(\w+),要不没有要不必须有一个及以上字符,?:在这不用管,是跳过存储匹配模式的,后面的就简单了,0个及以上字符,以0个及一个.接一个以上字符结尾。