The defined routine

Combined from primary sources listed below.

In class Junction ( Type/Junction )§

See primary docmentation in context for method defined.

method defined§

multi method defined(Junction:D:)

Checks for definedness instead of Boolean values.

say ( 3 | Str).defined ;   # OUTPUT: «True␤»
say (one 3, Str).defined;  # OUTPUT: «True␤»
say (none 3, Str).defined# OUTPUT: «False␤»

Failures are also considered non-defined:

my $foo=Failure.new;
say (one 3, $foo).defined# OUTPUT: «True␤»

Since 6.d, this method will autothread.

In class Mu ( Type/Mu )§

See primary docmentation in context for method defined.

method defined§

multi method defined(   --> Bool:D)

Returns False on a type object, and True otherwise.

say Int.defined;                # OUTPUT: «False␤»
say 42.defined;                 # OUTPUT: «True␤»

A few types (like Failure) override defined to return False even for instances:

sub fails() { fail 'oh noe' };
say fails().defined;            # OUTPUT: «False␤»

In class Mu ( Type/Mu )§

See primary docmentation in context for routine defined.

routine defined§

multi defined(Mu --> Bool:D)

invokes the .defined method on the object and returns its result.

In class Failure ( Type/Failure )§

See primary docmentation in context for method defined.

method defined§

multi method defined(Failure:D: --> Bool:D)

Returns False (failures are officially undefined), and marks the failure as handled.

sub f() { fail };
my $v = f;
say $v.handled# OUTPUT: «False␤»
say $v.defined# OUTPUT: «False␤»
say $v.handled# OUTPUT: «True␤»