In Variable§

有关特性是动态的,请参阅主要文档 按上下文

multi trait_mod:<is>(Variable:D:$dynamic)

将变量标记为动态的,也就是说,可以在内部动态作用域中访问,而无需位于内部词法作用域中。

sub introspect() {
    say $CALLER::x;
}
my $x is dynamic = 23;
introspect;         # OUTPUT: «23␤» 
{
    # not dynamic 
    my $x;
    introspect()    # dies with an exception of X::Caller::NotDynamic 
}

is dynamic 特性是一种创建和访问动态变量的相当繁琐的方法。一种更简单的方法是使用 * twigil

sub introspect() {
    say $*x;
}
my $*x = 23;
introspect;         # OUTPUT: «23␤» 
{
    # not dynamic 
    my $x;
    introspect()    # dies with an exception of X::Dynamic::NotFound 
}