The Perl and Raku Conference 2025: Greenville, South Carolina - June 27-29 Learn more

use strict;
$HTML::FormFu::Deflator::FormatNumber::VERSION = '2.07';
# ABSTRACT: Format a number for a locale
use Moose;
use POSIX qw( setlocale LC_NUMERIC );
has precision => (
is => 'rw',
default => 2,
lazy => 1,
isa => 'Int',
traits => ['Chained'],
);
has trailing_zeroes => (
is => 'rw',
default => 0,
lazy => 1,
isa => 'Int',
traits => ['Chained'],
);
sub deflator {
my ( $self, $value ) = @_;
my $backup_locale = setlocale(LC_NUMERIC);
if ( my $locale = $self->locale ) {
# throwing errors from deflator() isn't supported
# if unable to set locale, return the original value
setlocale( LC_NUMERIC, $locale )
or return $value;
}
my $format = Number::Format->new;
$value = $format->format_number( $value, $self->precision,
$self->trailing_zeroes );
# restore locale
setlocale( LC_NUMERIC, $backup_locale );
return $value;
}
__PACKAGE__->meta->make_immutable;
1;
__END__
=pod
=encoding UTF-8
=head1 NAME
HTML::FormFu::Deflator::FormatNumber - Format a number for a locale
=head1 VERSION
version 2.07
=head1 SYNOPSIS
locale: de_DE
elements:
- type: Text
name: number
deflators:
- type: FormatNumber
precision: 4
- type: Text
name: price
deflators:
- type: FormatNumber
precision: 2
trailing_zeroes: 1
# "123456.22" will be rendered to "123.456,22" (german locale)
=head2 locale
If no locale is found, the server's locale will be used.
This method is a special 'inherited accessor', which means it can be set on
the form, a enclosing block element, the field, or this filter.
When the value is read, if no value is defined it automatically traverses
the element's hierarchy of parents, through any block elements and up to the
form, searching for a defined value.
=head1 AUTHOR
Moritz Onken, C<onken at houseofdesign.de>
=head1 SEE ALSO
Is a sub-class of, and inherits methods from L<HTML::FormFu::Deflator>
L<HTML::FormFu::Filter::FormatNumber>
L<HTML::FormFu>
=head1 COPYRIGHT & LICENSE
Copyright 2008 Moritz Onken, all rights reserved.
This program is free software; you can redistribute it and/or modify it
under the same terms as Perl itself.
=head1 AUTHOR
Carl Franks <cpan@fireartist.com>
=head1 COPYRIGHT AND LICENSE
This software is copyright (c) 2018 by Carl Franks.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
=cut