use MooseX::Declare; class Test { sub test (Defined $i) { return "$i ist immer ein definierter Wert"; } sub test2 (Int $i) { return "$i ist immer ein Integer\n"; } } my $obj = Test->new; say $obj->test('abc'); # ok say $obj->test(0); # ok say $obj->test(undef); # nok say $obj->test; # nok say $obj->test2('abc'); # nok say $obj->test2(0); # ok say $obj->test2(undef); # nok say $obj->test2; # nok