Каково соглашение с reftype {}?

Я недавно видел некоторый код, который напомнил мне задавать этот вопрос. В последнее время я видел многое из этого:

use Scalar::Util 'reftype';

if ( reftype $some_ref eq reftype { } ) { ... }

Какова цель звонить reftype на анонимном hashref? Почему не просто говорят eq 'HASH' ?

5
задан friedo 25 May 2010 в 21:37
поделиться

1 ответ

Вы можете сравнить это сейчас с «HASH», потому что это то, что возвращается сейчас.

Но так бывает не всегда.

Хорошим примером является изменение, которое они внесли в скомпилированное регулярное выражение. В старых версиях Perls reftype был СКАЛЯРНЫМ. Однако с 5.12 (я полагаю) теперь это отдельный тип, REGEXP. Пример:

perl -MScalar :: Util = reftype -e "print reftype qr //" в 5.8 дает SCALAR , но то же самое в 5.12 дает REGEXP .

Вы можете увидеть другое применение этого в , этот вопрос я задал некоторое время назад, за исключением того, что там использовалось ref вместо reftype . Но принцип тот же.

Просто сравнивая его с reftype {} , они гарантируют, что это точно сейчас и в будущем без (и я думаю, что это отличная особенность) жесткого кодирования еще одной строки в вашей программе .

5
ответ дан 14 December 2019 в 19:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: