ここでばかげたことをしていることはわかっていますが、疲れていて、どうやらそれが見えていないようです。次のスクリプトがあります。
#!/usr/bin/perl
use strict;
use warnings;
my @names = (
"John Q. Public",
"James K Polk"
);
foreach (@names)
{
print "Before: $_\n";
s/\b[A-Z]\.?\b//;
print "After: $_\n";
}
このスクリプトを実行すると、次の出力が得られます。
Before: John Q. Public
After: John . Public <== Why is the period still here?
Before: James K Polk
After: James Polk
John Q. Publicの例では、ピリオドが残っていることに注意してください。オプションの match 引数 ( ?
) が貪欲ではありませんか? perlre docsによると:
? 1回または0回一致
ピリオドはミドルイニシャルと一緒に消えるべきではありませんか? ここで何が欠けていますか?