我继承了以下Perl代码,我很难理解索引和匹配函数在这里做了什么:
my $url = $ENV{'REQUEST_URI'};
my $loc = $url;
$loc =~ s/\/parks\///i;
my $page = substr($loc, 0, index $loc, "_");
我知道index(str,char)返回特定字符的索引,那么index $loc
提供什么功能?它只是返回长度吗?
我也对与网址中的“/ parks /”匹配的行$loc =~ s/\/parks\///i;
感到困惑。我没有看到它的目的,因为它是否返回true
或false
,是不是$ loc仍然是一个包含url的字符串?我应该期望在$ page中包含什么?
我对Perl很新,所以我很欣赏我还有一些细微差别。
答案 0 :(得分:3)
Perl略显傲慢的括号方法可能让你有点困惑。拨打substr
和index
的提示可能更明确地写为:
my $page = substr($loc, 0, index($loc, "_"));
它正在寻找$ loc中第一次出现'_'并截断该变量。
此外,如果您使用了替代分隔符,则替换运算符将更容易理解。
$loc =~ s|/parks/||i;
这意味着“在$ loc中查找第一次出现的”/ parks /“并将其替换为空字符串(即删除它)。
答案 1 :(得分:1)
$loc =~ s/\/parks\///i;
这将从字符串$ loc
中删除/parks/
my $page = substr($loc, 0, index $loc, "_");
可以写成:
# retrieve the position of the first "_" in the string $loc
my $index = index $loc, "_";
# keep the begining of the string from position 0 to position $index
my $page = substr($loc, 0, $index);