Mam problem z perl: importowanie symboli, w zależności od elementów ścieżki w @INC
i instrukcji use
.perl: Exporter nie działa z elementami ścieżki w instrukcji `use`
Jeśli wstawię pełną ścieżkę do @INC
, import działa. Jeżeli część ścieżki jest w rachunku use
moduł do importu jest wykonywana, ale import musi być zrobione wyraźnie:
########################################
# @INC has: "D:/plu/lib/"
#------------------------------------------------
# Exporting file is here: "D:/plu/lib/impex/ex.pm"
#
use strict;
use warnings;
package ex;
use Exporter;
our @ISA = 'Exporter';
our @EXPORT = qw(fnQuark);
sub fnQuark { print "functional quark\n"; }
print "Executing module 'ex'\n";
1;
#------------------------------------------------
# Importing file, example 1, is here: "D:/plu/lib/impex/imp.pl"
#
use strict;
use warnings;
package imp;
use impex::ex;
ex->import(@ex::EXPORT); # removing this line makes fnQuark unavailable!
# Why is this necessary, 'ex.pm' being an Exporter?
fnQuark();
#------------------------------------------------
# Importing file, example 2, is here: "D:/plu/lib/impex/imp2.pl"
#
use strict;
use warnings;
package imp2;
use lib 'D:/plu/lib/impex';
use ex;
fnQuark(); # works without explicit import
#-------------------------------------------------
Jaki jest mój błąd?
Dziękuję za szybką odpowiedź. Ale nie rozumiem, dlaczego wcześniej nie miałem takiego problemu. Mam tyle modułów, np. sol. "FotoArchive.pm" w lib/Foto, z nazwą pakietu FotoArchive i Foto nie w ścieżce @INC. Dlaczego nie powoduje to tych samych problemów, gdy przywołuję je za pomocą Foto :: FotoArchive? - Ach, zaczynam widzieć, bo nie eksportują niczego. Więc od tak dawna uniknąłem mojego błędu niezauważony! Dziękuję Ci! – Sadko