Return `ref qr/.../` 的值

Return value of `ref qr/.../`

ref:

But note that qr// scalars are created already blessed, so ref qr/.../ will likely return Regexp.

“可能”是否意味着 ref qr/.../ 也可能 return 除了 Regexp

我认为它指的是有人可以重新祝福正则表达式,警告 ref($something) eq 'Regexp' 并非 100% 可靠。

use 5.010;

my $x = qr/a/;
say ref($x);

bless $x, "Foo";
say ref($x);

say "a" =~ /$x/;
Regex
Foo
1

除了上述假阴性之外,还可能出现假阳性,因为有人可以将不是正则表达式的东西祝福到 Regexpreftype 是一个更好的工具。

use 5.010;

use Scalar::Util qw( reftype );

my $re = bless(qr/a/, "Foo");
my $not = bless({}, "Regexp");

say ref($re),  " - ", reftype($re);
say ref($not), " - ", reftype($not);
Foo - REGEXP
Regexp - HASH