2011-10-19 4 views
1

나는 다음과 같은 펄 코드를 계승 한, 내가 어려움을 정확히 인덱스와 일치하는 기능이 여기에 무엇을하고 있는지 이해하는 데 문제가 :이해 펄 일치 인덱스 기능

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

내가 아는 STR (인덱스 즉, char)는 특정 문자의 인덱스를 반환하므로 어떤 함수가 index $loc에 제공됩니까? 그것은 단순히 길이를 반환합니까?

또한 URL에 "/ parks /"문구와 일치하는 $loc =~ s/\/parks\///i; 줄과 혼동 스럽습니다. true 또는 false이 반환되는지 여부에 관계없이 $ loc가 여전히 URL을 포함하는 문자열이 아니기 때문에 그 목적을 알지 못합니까? $ page에 무엇이 포함될 것으로 예상해야합니까?

저는 아직 익숙하지 않았기 때문에 약간의 미묘한 차이가있을 것입니다.

답변

3

.

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

그것은 $의 LOC에 '_'의 첫 번째 항목을 찾고 그 시점에서 변수를 잘라내는 것 : substrindex에 대한 호출은 더 명확로 기록 될 수 있습니다.

또한 대체 구분 기호를 사용하면 대체 연산자를 이해하기가 쉽습니다.

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

그것은 $의 LOC에서/공원/""의 첫 번째 항목을 찾아 "와 (즉, 제거) 빈 문자열로 교체 의미한다.

1
$loc =~ s/\/parks\///i; 

이것은 문자열 $ LOC

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

에서 /parks/를 제거 같이 쓸 수있다 : 괄호에 펄의 약간 무심 접근 방식은 여기에 당신에게 조금 혼동 될 수

# 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); 
+1

을 그렇진. $ 지수는 길이 인수된다 substr, 그래서 당신은 모든 문자를 얻을 수있는 첫 번째 "_" – runrig