true(3) automatically return a true value when a file is required


package Contemporary::Perl;
use strict;
use warnings;
use true;
sub import {


Perl's "require" builtin (and its "use" wrapper) requires the files it loads to return a true value. This is usually accomplished by placing a single


statement at the end of included scripts or modules. It's not onerous to add but it's a speed bump on the Perl novice's road to enlightenment. In addition, it appears to be a non-sequitur to the uninitiated, leading some to attempt to mitigate its appearance with a comment:

    1; # keep require happy


    1; # Do not remove this line

or even:

    1; # Must end with this, because Perl is bogus.

This module packages this ``return true'' behaviour so that it need not be written explicitly. It can be used directly, but it is intended to be invoked from the "import" method of a Modern::Perl-style module that enables modern Perl features and conveniences and cleans up legacy Perl warts.


"true" is file-scoped rather than lexically-scoped. Importing it anywhere in a file (e.g. at the top-level or in a nested scope) causes that file to return true, and unimporting it anywhere in a file restores the default behaviour. Redundant imports/unimports are ignored.


Enable the ``automatically return true'' behaviour for the currently-compiling file. This should typically be invoked from the "import" method of a module that loads "true". Code that uses this module solely on behalf of its callers can load "true" without importing it e.g.

    use true (); # don't import
    sub import {

But there's nothing stopping a wrapper module also importing "true" to obviate its own need to explicitly return a true value:

    use true; # both load and import it
    sub import {
    # no need to return true


Disable the ``automatically return true'' behaviour for the currently-compiling file.


None by default.


Because some versions of YAML::XS may interpret the key of "true" as a boolean, you may have trouble declaring a dependency on You can work around this by declaring a dependency on the package true::VERSION, which has the same version as


chocolateboy, <[email protected]>


Copyright (C) 2010-2011 by chocolateboy

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.10.0 or, at your option, any later version of Perl 5 you may have available.