Понимание Perl соответствия и индексирования функций - PullRequest
1 голос
/ 19 октября 2011

Я унаследовал следующий код Perl, и мне трудно понять, что именно здесь делают функции index и match:

my $url = $ENV{'REQUEST_URI'};
my $loc = $url;
$loc =~ s/\/parks\///i;
my $page = substr($loc, 0, index $loc, "_");

Я знаю, что index (str, char) возвращаетиндекс определенного символа, так какую функцию выполняет index $loc?Это просто возвращает длину?

Меня также смущает строка $loc =~ s/\/parks\///i;, которая соответствует фразе "/ parks /" в URL.Я не вижу цели этого, потому что, возвращает ли он true или false, не является ли $ loc все еще строка, содержащая URL?Что мне следует ожидать от $ page?

Я новичок в Perl, поэтому я ценю некоторые нюансы, которые я еще не понял.

Ответы [ 2 ]

3 голосов
/ 19 октября 2011

Немного кавалерный подход Perl к круглым скобкам может вас здесь немного смущать. Вызовы substr и index могут быть записаны более четко как:

my $page = substr($loc, 0, index($loc, "_"));

Он ищет первое вхождение '_' в $ loc и обрезает переменную в этой точке.

Кроме того, оператор подстановки будет легче понять, если вы используете альтернативные разделители.

$loc =~ s|/parks/||i;

Это означает "искать первое вхождение" / parks / "в $ loc и заменить его пустой строкой (т.е. удалить ее).

1 голос
/ 19 октября 2011
$loc =~ s/\/parks\///i;

Это удалит /parks/ из строки $ loc

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...