The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use 5.008001;
use utf8;
use strict;
use warnings;

use Locale::KeyedText;

###########################################################################
###########################################################################

{ package MyLib; # module
    sub my_invert {
        my (undef, $number) = @_;
        die Locale::KeyedText::Message->new({
                'msg_key' => 'MYLIB_MYINV_NO_ARG' })
            if !defined $number;
        die Locale::KeyedText::Message->new({
                'msg_key'  => 'MYLIB_MYINV_BAD_ARG',
                'msg_vars' => { 'GIVEN_VALUE' => $number },
            })
            if $number !~ m/^-?(\d+\.?|\d*\.\d+)$/x; # integer or decimal
        die Locale::KeyedText::Message->new({
                'msg_key' => 'MYLIB_MYINV_RES_INF' })
            if $number == 0;
        return 1 / $number;
    }
} # module MyLib

###########################################################################
###########################################################################

my $TEXT_STRINGS_E = {
    'MYLIB_MYINV_NO_ARG' => q[my_invert(): argument $number is missing],
    'MYLIB_MYINV_BAD_ARG'
        => q[my_invert(): argument $number is not a number,]
           . q[ it is "<GIVEN_VALUE>"],
    'MYLIB_MYINV_RES_INF'
        => q[my_invert(): result is infinite because]
           . q[ argument $number is zero],
};

{ package MyLib::L::Eng; # module
    sub get_text_by_key {
        my (undef, $msg_key) = @_;
        return $TEXT_STRINGS_E->{$msg_key};
    }
} # module MyLib::L::Eng

###########################################################################
###########################################################################

my $TEXT_STRINGS_F = {
    'MYLIB_MYINV_NO_ARG' => q[my_invert(): paramètre $number est manquant],
    'MYLIB_MYINV_BAD_ARG'
        => q[my_invert(): paramètre $number est ne nombre,]
           . q[ il est "<GIVEN_VALUE>"],
    'MYLIB_MYINV_RES_INF'
        => q[my_invert(): aboutir a est infini parce que]
           . q[ paramètre $number est zero],
};

{ package MyLib::L::Fre; # module
    sub get_text_by_key {
        my (undef, $msg_key) = @_;
        return $TEXT_STRINGS_F->{$msg_key};
    }
} # module MyLib::L::Fre

###########################################################################
###########################################################################

1;