2012-10-04 27 views
1

下面是示例代碼:爲什麼在Perl指數函數的行爲出現異常這裏

my $test = "Mike Xavier Smith/123-45-1111/student"; 
my $name = substr($test, 0, index($test, "/")); 
my $ssn = substr($test,index($test,"/")); 
my $type = substr($test,index($test, "/", 2)); 
print "$name, $ssn, $type \n"; 
exit; 

輸出: 邁克·澤維爾·史密斯/ 123-45-1111 /學生/ 123-45-1111 /學生

This line substr($ test,index($ test,「/」,2)); #offset應該來自第二次出現的「/」,這意味着它應該打印/學生。
但是爲什麼從第一次出現「/」打印呢?

回答

8

這不是index的第三個參數。

my $test = "Mike Xavier Smith/123-45-1111/student"; 

my $start = 0; 
my $end = index($test, "/", $start); 
my $name = substr($test, $start, $end); 

$start = $end+1; 
$end = index($test, "/", $start); 
my $ssn = substr($test, $start, $end); 

$start = $end+1; 
$end = index($test, "/", $start); 
my $type = substr($test, $start, $end); 

print "$name, $ssn, $type\n"; 

大多數人只會使用split

my $test = "Mike Xavier Smith/123-45-1111/student"; 
my ($name, $ssn, $type) = split(qr{/}, $test); 
print "$name, $ssn, $type\n"; 
+0

那麼「perlmeme.org」如何顯示5的索引(「perlmeme.org」,「e」,2)? – Jassi

+1

@Jassi,爲什麼不呢?請記住,這些位置是偏移量(從0開始)。 – ikegami

+0

因爲「p」和「e」被省略了嗎?試試'perl -we'打印索引(「perlmeme.org」,「e」,3);' - 它仍然會得到「5」。 – Dallaylaen

相關問題