package HMDS::Perl 0.02;
## no critic 'RequirePodSections'

# strictures
use Modern::Perl '2012';
# dont warn and die in modules
use Carp;

# always die if open close etc return false
use autodie  ();
# dont use my $var = new MY::Module
use indirect ();
# use C3 method resulution order
use mro      ();
# use better punctuation var names (man perlvar)
use English qw( -no_match_vars );
# better constants
use Const::Fast;

# This adds the UTF-8 layer on STDIN, STDOUT, STDERR for _everyone_
use open qw( :encoding(UTF-8) :std );
# allow unicode in source 🎅
use utf8 ();
# for versions of perl before 5.016 to use \N{FATHER CHRISTMAS}
use charnames ':full';
# exception handling
use Try::Tiny;
# basic date handling by default
use DateTime;

use Import::Into;

sub import {
    my $caller_level = 1;

    Modern::Perl->import::into($caller_level);

    mro::set_mro( scalar caller(), 'c3' );
    utf8->import::into($caller_level);

    indirect->unimport::out_of( $caller_level, ':fatal' );

    'open'->import::into( $caller_level, ':encoding(UTF-8)', ':std' );
    charnames->import::into( $caller_level, ':full' );
    autodie->import::into( $caller_level, ':all' );
    English->import::into( $caller_level, '-no_match_vars' );
    DateTime->import::into($caller_level);
    Try::Tiny->import::into($caller_level);
    Const::Fast->import::into($caller_level);
    return;
}
1;

__END__
=pod


=encoding utf8

=for stopwords HMDS::Perl autodie

=head1 NAME

HMDS::Perl - stuff to import everywhere

=head1 VERSION

Version 0.02

=head1 SYNOPSIS

C<use HMDS::Perl>

=head1 DESCRIPTION

Strictures and modules to standardise HILIS4 code

Plus some convenience

=over 4

=item uses const::Fast instead of constant

=item doesn't allow indirect notation, e.g. my $o = new Thing;

=item uses autodie

=item uses Try::Tiny for exception handling

=item uses English for clearer code, e.g, $OS_ERROR instead of $!

=item uses utf-8 for unicode in source «yay!»

=item uses charnames for unicode characters via \\N{LATIN CAPITAL LETTER A}

=back

#=head1 SUBROUTINES/METHODS
#
#=head1 DIAGNOSTICS
#
#=head1 CONFIGURATION AND ENVIRONMENT
#
=head1 DEPENDENCIES

Const::Fast

Try::Tiny


=head1 BUGS AND LIMITATIONS

This is a first stab at a HMDS module so is likely to change a fair bit

=head1 AUTHOR

Garry Quested <garry.quested@nhs.net>

=head1 SEE ALSO

perl(1).

=head1 LICENSE AND COPYRIGHT

Copyright (c) 2018, HMDS.  All Rights Reserved.

This script is free software; you can redistribute it and/or modify it
under the same terms as Perl itself.


