`ref qr/.../` 的返回值

sid*_*com 8 perl

参考

但请注意,qr//标量在创建时已经受到祝福,因此ref qr/.../可能会返回Regexp

“可能”是否意味着,这ref qr/.../也可能返回除Regexp

ike*_*ami 10

我认为这是指有人可能会修改正则表达式,警告这ref($something) eq 'Regexp'不是 100% 可靠。

use 5.010;

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

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

say "a" =~ /$x/;
Run Code Online (Sandbox Code Playgroud)
Regex
Foo
1
Run Code Online (Sandbox Code Playgroud)

除了上述误报之外,误报也是可能的,因为有人可能会祝福不是正则表达式的东西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);
Run Code Online (Sandbox Code Playgroud)
Foo - REGEXP
Regexp - HASH
Run Code Online (Sandbox Code Playgroud)