Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I declare a class variable as floating point in Moose?

How can I declare a class variable as floating point in Moose?

My (fictional) sample below produces errors for "Real", "Number" etc ... "Str" works but defeats the purpose .. searching/Google doesn't help, since I can't hit the correct search terms...


PROBLEM.pm

package PROBLEM;
use strict;
use warnings;
use Moose;

has 'PROBLEM'=> (isa=>'real',is =>'ro',required=>'0',default=>sub {0.1;});

main.pl

use strict;
use warnings;

use PROBLEM;

my $problem=PROBLEM->new();
like image 506
lexu Avatar asked Sep 17 '09 08:09

lexu


2 Answers

Check out the Moose Types documentation. There is no built-in float type, just Num and its subtype Int. This makes sense, since Perl really doesn't differentiate (visibly) between floats and integers.

The best thing to do is probably to use Num as the type constraint, or write your own type that coerces the value into some form that suits your needs.

like image 87
friedo Avatar answered Oct 01 '22 08:10

friedo


You need Num type for a real number:

{
    package Problem;
    use Moose;

    has 'number' => ( 
        isa      => 'Num', 
        is       => 'ro', 
        default  => sub { 0.1 },
    );
}


my $problem = Problem->new;
say $problem->number;  # => 0.1
like image 44
draegtun Avatar answered Oct 01 '22 06:10

draegtun