6 Stimmen

Perl-Modul-Fehler bezüglich "undefinierter Unterroutine"

Ich versuche, ein Modul namens Math::Zählen :

#!/usr/bin/perl 

use strict;
use warnings;
use Math::Counting;

my $f = factorial(3);
print "$f\n";

Wenn ich es jedoch ausführe, erhalte ich die folgende Fehlermeldung

$ perl UsingModules.pl
Undefined subroutine &main::factorial called at UsingModules.pl line 8.

Es scheint, dass die Funktion factorial wird nicht exportiert, aber warum?

Wenn ich das Folgende verwendet habe

my $f = Math::Counting::factorial(3);

anstelle des obigen Beispiels funktioniert es einwandfrei, aber ich bin neugierig, warum die Funktion nicht exportiert werden kann.

Ich verwende perl v5.10.1 auf Cygwin.

0voto

David W. Punkte 101611

Schauen Sie sich den Quellcode von Math::Counting an, um zu sehen, welche Version es ist. So finden Sie heraus, wo sich der Quellcode befindet:

prompt> perldoc -l Math::Counting

Sie können die Version eines Moduls in 90% der Fälle auch durch einen Blick in die $VERSION variabel:

use Math::Dumper;
print "The version of Math::Dumper is $Math::Dumper::VERSION\n";

Ich habe gerade die Version 0.0902 heruntergeladen, und das folgende Programm funktioniert einwandfrei:

#! /usr/bin/env perl
#
use strict;
use warnings;
use feature qw(say);

use Math::Counting;

say $Math::Counting::VERSION;
say factorial(6);

Ich stelle fest, dass er das in dieser Version tut:

our @ISA = qw(Exporter);
our @EXPORT = qw(
    factorial permutation combination
    bfact     bperm       bcomb
);

Es sieht also so aus, als ob der Autor alle seine Unterprogramme in dieser speziellen Version automatisch exportiert. Der Autor hat außerdem zwei Gruppen von Export-Tags definiert :student y big .

Es könnte sein, dass er in früheren Versionen nicht über @EXPORT definiert, aber verwendet @EXPORT_OK (was vorzuziehen ist), und Sie mussten dies tun:

use Match::Counting qw(:student);

o

use Math::Counting qw(factorial);

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X