了解Perl匹配和索引函数

时间:2011-10-19 12:32:36

标签: perl

我继承了以下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;感到困惑。我没有看到它的目的,因为它是否返回truefalse,是不是$ loc仍然是一个包含url的字符串?我应该期望在$ page中包含什么?

我对Perl很新,所以我很欣赏我还有一些细微差别。

2 个答案:

答案 0 :(得分:3)

Perl略显傲慢的括号方法可能让你有点困惑。拨打substrindex的提示可能更明确地写为:

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);