Exporter - abhängig von Lage des modules?

04/02/2009 - 19:27 von Ekki Plicht (DF4OR) | Report spam
Ich möchte mir mal wieder mit der flachen Hand vor die Stirn schlagen und
feststellen, das ich zu doof bin.

Gegeben sei ein module 'HAM/Device/IcomCIV/CIVSupport.pm':
################################
package CIVSupport;

use strict;
use warnings;

require Exporter;

BEGIN { $Exporter::Verbose = 1 }

our @ISA = qw( Exporter );

our @EXPORT = ();

our @EXPORT_OK = qw ( get_civ_adress );

sub get_civ_adress {
my $r = shift;
return $r;
};


1;
################################

Desweiteren sei ein Hauptprogramm 'supptest.pl' gegeben:

################################
#!/usr/bin/perl -w

use strict;
use warnings;

use HAM::Device::IcomCIV::CIVSupport qw ( get_civ_adress );
use Data::Dumper;

BEGIN { $Exporter::Verbose = 1 }

print Dumper(%INC);

my $a = get_civ_adress( 'IC-R8500' );
print "Adr: $a";
################################

Der Aufruf von get_civ_adress schlàgt fehl, undefined subroutine. Ok, die
Diagnoseausgabe von $Exporter::Verbose zeigt auch nicht an, dass vom
module 'CIVSupport.pm' irgendwas importiert werden würde. Warum auch
immer...

Die Diagnoseausgabe von %INC zeigt aber schön:
...
$VAR7 = 'HAM/Device/IcomCIV/CIVSupport.pm';
$VAR8 = 'HAM/Device/IcomCIV/CIVSupport.pm';
...

Packe ich das module in das gleiche Verzeichnis wie das Hauptprogramm, und
àndere ich entsprechend die use Anweisung in

use CIVSupport qw( get_civ_adress );

funktionierts.

Nur wieso?

Danke.
Ekki
 

Lesen sie die antworten

#1 Frank Seitz
05/02/2009 - 00:38 | Warnen spam
Ekki Plicht (DF4OR) wrote:

[Export klappt nicht]

Nur wieso?



Bei

use P;

ruft Perl

P->import;

auf.

Du musst in HAM/Device/IcomCIV/CIVSupport.pm also

package HAM::Device::IcomCIV::CIVSupport;

definieren, damit es funktioniert.

Grüße
Frank
Dipl.-Inform. Frank Seitz; http://www.fseitz.de/
Anwendungen für Ihr Internet und Intranet
Tel: 04103/180301; Fax: -02; Industriestr. 31, 22880 Wedel

Ähnliche fragen