2009-10-09 8 views
2

La documentation de l'option /m dans perlre dit ceci:En Perl, y a-t-il une différence entre/^/et/^/m?

chaîne Traiter comme plusieurs lignes. , remplacez "^" et "$" par le début ou la fin de la chaîne correspondant au début ou à la fin de la ligne n'importe où dans la chaîne.

Mais cet exemple semble indiquer que /^/ et /^/m se comportent de la même façon. Qu'est-ce que je ne comprends pas?

use strict; 
no warnings; # Ignore warning about implicit split to @_ 
my $x = " \n \n "; 
print scalar(split /^/m, $x), scalar(split /$/m, $x), "\n"; # 33 
print scalar(split /^/, $x), scalar(split /$/, $x), "\n"; # 31 
+0

Lorsque vous pensez avoir trouvé quelque chose de bizarre, essayez de le reproduire en utilisant une technique complètement différente. Cela vous aurait montré que c'est la séparation magique, pas le/m. :) –

Répondre

19

Oui, /^/ est différent de celui /^/m, mais parce que /^/ serait inutile lorsqu'il est utilisé avec split, il (pour split seulement) devient automatiquement /^/m. Ceci est documenté dans perldoc -f split.

C'est le genre de DWIM surprenant qui ne serait probablement pas inclus dans Perl si nous devions tout recommencer.

Questions connexes