Theo như tôi biết trong cờ '/ g' toàn cầu có nghĩa là tìm kiếm sẽ thay thế/trả về tất cả các kết quả khớp trong suốt chuỗi. Nhưng tôi không thể hiểu được cách thức mà nó phản ứng với các biến toàn cầu trong khi phù hợp với, ai đó có thể giải thích tại sao có sự chênh lệch giữa đầu ra của hai chương trình mẫu:Giúp hiểu cờ toàn cầu trong perl
Phiên bản 1:
my $text = 'This is sample float value 3.2 ';
getFloat();
getFloat();
sub getFloat(){
if ($text =~ /([0-9]+?)(.?)([0-9]+?)/is){
print "matched> $1$2$3 ";
}
}
Output: hợp> 3.2 hợp> 3,2
Version 2: (với cờ toàn cầu)
my $text = 'This is sample float value 3.2 ';
getFloat();
getFloat();
sub getFloat(){
if ($text =~ /([0-9]+?)(.?)([0-9]+?)/gis){
print "matched> $1$2$3 ";
}
}
Output: hợp> 3,2
Như đã thấy từ đầu ra, với kết hợp cờ toàn cầu xảy ra một lần duy nhất. Ai đó có thể giải thích hành vi này.
Bạn nên xem [perldoc perlretut] (http://perldoc.perl.org/perlretut.html#Using-regular-expressions- in-Perl) – TLP
Bạn đang mong đợi điều gì? Bạn muốn nó tiếp tục khớp cho đến khi nó không khớp? Điều đó có nghĩa là điều kiện 'if' sẽ luôn là sai. Tóm lại, 'if (/.../ g)' không có ý nghĩa gì cả. – ikegami