To elaborate on raiph's answer: the *
in $*DISTRO
marks it as a dynamic variable. You can re-declare it any scope, and code called from there will see the redeclared value:
{
my $*DISTRO = ...;
# coded called from here sees the redeclared value
}
# code called from here sees the original value
Now, the question remains, what do you put in place of these pesky ...
?
In the simplest case, a mock that just has whatever the code under test needs:
{
my class Distro { has $.is-win }
my $*DISTRO = Distro.new( :is-win );
# call your test code here
}
If the code needs more attributes in Distro
, just add them to the mock Distro
class.
If the code needs a "real* Distro
object, for some reason, you can instantiate the built-in one. The constructor .new
isn't really documented, but the source code makes it pretty obvious what arguments it expects.