If you want to make the constants available in the namespace that uses SPEAK::ITALIAN, you need to export them, just like you did with the sub hello:
@EXPORT = qw(hello HELLO GOODBYE);
Otherwise, you have to access them fully qualified:
print SPEAK::ITALIAN::GOODBYE . " in Italiano\n";
Update: or you could do it the OO way (via inheritance):
package SPEAK::ITALIAN;
use strict;
use warnings;
use constant HELLO => "Hello";
use constant GOODBYE => "Goodbye";
sub new {
my $class = shift;
return bless {}, $class;
}
sub hello {
print HELLO . " in Italiano\n";
}
1;
# the derived class (SPEAK/ITALIAN/Goodbye.pm)
package SPEAK::ITALIAN::Goodbye;
use strict;
use warnings;
use base "SPEAK::ITALIAN";
sub goodbye {
my $self = shift;
print $self->GOODBYE . " in Italiano\n";
}
1;
# your script
#!/usr/bin/perl
use strict;
use warnings;
use SPEAK::ITALIAN::Goodbye;
my $obj = SPEAK::ITALIAN::Goodbye->new();
$obj->hello();
$obj->goodbye();