Используя String.format, вы можете сделать это:
double price = 52000;
String.format("$%,.2f", price);
Обратите внимание на запятую, которая отличает ее от ответа @ Винсента
Выход:
$52,000.00
Хорошим ресурсом для форматирования является официальная java-страница по этому вопросу
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);
Вы, вероятно, не должны делать этого. Базовый тип объекта является деталью реализации, с которой Вы не должны смешивать. Почему Вы хотели бы знать это?
И моя первая мысль об этом была: "Объекты в 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