Special modules for special use
In Perl 6, pragmas are core modules used to either identify a specific version of Perl 6 to be used or to modify its normal behavior in some way. They are "use"ed in your code just as normal modules:
Following is a list of pragmas with a short description of each pragma's purpose or a link to more details about its use. (Note: Pragmas marked "[NYI]" are not yet implemented, and those marked "[TBD]" are to be defined later.)
This pragma is not currently part of any Perl 6 specification, but is present in Rakudo as a synonym to
use nqp (see below).
experimental allows use of experimental features
A lexical pragma that makes Failures returned from routines fatal. For example, prefix
+ on a Str coerces it to Numeric, but will return a Failure if the string contains non-numeric characters. Saving that Failure in a variable prevents it from being sunk, and so the first code block below reaches the
say $x.^name; line and prints
Failure in output.
In the second block, the
use fatal pragma is enabled, so the
say line is never reached because the Exception contained in the Failure returned from prefix
+ gets thrown and the
CATCH block gets run, printing the
Caught... line. Note that both blocks are the same program and
use fatal only affects the lexical block it was used in:
# OUTPUT: «Failure␤»# OUTPUT: «Caught X::Str::Numeric␤»
Inside of a
try blocks, the
fatal pragma is enabled by default, and you can disable it with
try# OUTPUT: «Caught X::Str::Numeric␤»try# OUTPUT: «Failure␤»
Use at your own risk.
This is a Rakudo-specific pragma. With it, Rakudo provides access to the nqp opcodes in a top level namespace:
use nqp;nqp::say("hello world");
This uses the underlying nqp
say opcode instead of the Perl 6 routine. This pragma may make your code rely on a particular version of nqp, and since that code is not part of the Perl 6 specification, it's not guaranteed to be stable. You may find a large number of usages in the Rakudo core, which are used to make the core functionality as fast as possible. Future optimizations in the code generation of Rakudo may obsolete these usages.
strict is the default behavior, and requires that you declare variables before using them. You can relax this restriction with
no strict; = 42; # OK