2011-10-19 2 views
1

私は、次のPerlコードを継承してきた、と私は難しさを正確にインデックスと一致する関数がここで何をしているかを理解することだが:理解Perlの試合と指数関数

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を含む文字列ではないので、私はそれの目的を見ていないのですか? $ページには何が含まれると思いますか?

私はPerlにはとても新しいので、まだ把握していないニュアンスがあることを感謝します。

答えて

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/に削除されますように書くことができます。括弧にPerlのやや傲慢なアプローチは、ここであなたを少し混乱するかもしれません

# 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