Что за сделка с reftype {}? - PullRequest
5 голосов
/ 26 мая 2010

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

use Scalar::Util 'reftype';

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

Какова цель вызова reftype для анонимного хэшрефа? Почему бы просто не сказать eq 'HASH'?

1 Ответ

5 голосов
/ 26 мая 2010

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

Но это может быть не всегда.

Хорошим примером является изменение, которое они внесли в скомпилированное регулярное выражение. В старшей версии Perls reftype был скаляр. Однако по состоянию на 5.12 (я полагаю) это теперь свой собственный тип, REGEXP. Пример:

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...