Как я могу определить тип счастливой ссылки в Perl?

Используя String.format, вы можете сделать это:

double price = 52000;
String.format("$%,.2f", price);

Обратите внимание на запятую, которая отличает ее от ответа @ Винсента

Выход:

$52,000.00

Хорошим ресурсом для форматирования является официальная java-страница по этому вопросу

20
задан brian d foy 28 November 2008 в 18:31
поделиться

3 ответа

Scalar::Util::reftype() самое чистое решение. Scalar::Util модуль был добавлен к ядру Perl в версии 5.7, но доступен для более старых версий (5.004 или позже) от CPAN.

можно также зондировать с UNIVERSAL::isa():

$x->isa('HASH')             # if $x is known to be an object
UNIVERSAL::isa($x, 'HASH')  # if $x might not be an object or reference

, Очевидно, необходимо было бы также проверить на ARRAY и SCALAR типы. УНИВЕРСАЛЬНЫЙ модуль (который служит базовым классом для всех объектов) был частью ядра начиная с Perl 5.003.

Иначе - легкий, но немного грязный - к stringify ссылка. Предположение, что класс не перегрузил stringification, Вы возвратите что-то напоминающее Class=HASH(0x1234ABCD), который можно проанализировать для извлечения базового типа данных:

my $type = ($object =~ /=(.+)\(0x[0-9a-f]+\)$/i);
20
ответ дан 30 November 2019 в 00:44
поделиться

Вы, вероятно, не должны делать этого. Базовый тип объекта является деталью реализации, с которой Вы не должны смешивать. Почему Вы хотели бы знать это?

6
ответ дан 30 November 2019 в 00:44
поделиться

И моя первая мысль об этом была: "Объекты в Perl всегда являются судьями хеша, поэтому что взлом?"

, Но, Скаляр:: Util:: reftype является ответом. Спасибо за постановку вопроса здесь.

Вот фрагмент кода для доказательства этого.. (в случае, если это имеет любое применение для любого).

$> perl -e 'use strict; use warnings "all";
            my $x = [1]; bless ($x, "ABC::Def");
            use Data::Dumper; print Dumper $x;
            print ref($x) . "\n";
            use Scalar::Util "reftype"; print reftype($x) . "\n"'`

Вывод:

$VAR1 = bless( [
                 1
               ], 'ABC::Def' );
ABC::Def
ARRAY
2
ответ дан 30 November 2019 в 00:44
поделиться
Другие вопросы по тегам:

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