この質問に答えようとしているときに、Perl の正規表現エンジンの奇妙な動作に遭遇しました。正規表現と一致させようとしている 2 つの数量を含む文字列があります。正規表現は、文字列「units/ml」の前の任意の 8 文字と一致します。両方のユニットを手に入れたいです。
このスクリプトは、一致した 2 番目のもののみを出力します。
use warnings;
use strict;
my $line = 'some data 100,000 units/ml data 20,000 units/ml data';
my @array;
if ($line =~ m/.{8}units\/ml/g) {
@array = $line =~ m/.{8}units\/ml/g;
print join(' ', @array) . "\n";
}
その出力:
20,000 units/ml
行 6 を 2 回実行すると、@array に割り当てる行:
use warnings;
use strict;
my $line = 'some data 100,000 units/ml data 20,000 units/ml data';
my @array;
if ($line =~ m/.{8}units\/ml/g) {
@array = $line =~ m/.{8}units\/ml/g;
# Let's run that again, for good measure...
@array = $line =~ m/.{8}units\/ml/g;
print join(' ', @array) . "\n";
}
その出力:
100,000 units/ml 20,000 units/ml
これら 2 つのスクリプトで異なる結果が得られるのはなぜですか?