Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 01/11/2006, à 15:17

Priscour

[PERL]Utilisation des modules

Salut,

pour m'entrainer, j'ai voulu créer un module et l'utiliser.
Voici le fichier MonModule.pm

package MonModule;
use strict;

sub TableMult{
    my($n) = @_;
    for my $i(1..$n){
	for my $j(1..$n){
	    printf("%5d",$i*$j);
    }
	printf("\n");
}

1;

et le fichier Exo.pl

#!/usr/bin/perl -w
use strict;
use MonModule;

MonModule::TableMult(4);

A la compilation, j'ai ce message :

~$ ./Exo.pl
Missing right curly or square bracket at MonModule.pm line 14, at end of line
syntax error at MonModule.pm line 14, at EOF
Compilation failed in require at ./Exo.pl line 3.
BEGIN failed--compilation aborted at ./Exo.pl line 3.

#2 Le 01/11/2006, à 15:49

foobar2000

Re : [PERL]Utilisation des modules

A priori c'est a cause de tes accolades mal equilibrees. 3 ouvrantes, 2 fermantes.


Aucun rapport avec le logiciel du même nom.

Hors ligne

#3 Le 01/11/2006, à 16:29

PrisCours

Re : [PERL]Utilisation des modules

foobar2000 a écrit :

A priori c'est a cause de tes accolades mal equilibrees. 3 ouvrantes, 2 fermantes.

Merci ...
Maitenant, j'ai un autre souci :

~$ ./Exo.pl
Unquoted string "disque" may clash with future reserved word at ./Exo.pl line 15.
$VAR1 = bless( {
                 'RAYON' => 1,
                 'X' => 0,
                 'Y' => 0
               }, 'Disque' );
$VAR1 = bless( {
                 'RAYON' => 1,
                 'X' => 1,
                 'Y' => 2
               }, 'Disque' );
Can't locate object method "surface" via package "disque" (perhaps you forgot to load "disque"?) at ./Exo.pl line 15.

Voici mes 2 fichiers :
Disque.pm

package Disque;
use strict;
use Math::Trig;

sub new{
    my($class,$x,$y,$rayon) = @_;
    my $this = {};
    bless($this,$class);
    $this->{X} = $x;
    $this->{Y} = $y;
    $this->{RAYON} = $rayon;

    if(!defined($x)){$this->{X} = 0;}
    if(!defined($y)){$this->{Y} = 0;}
    if(!defined($rayon)){$this->{RAYON} = 1;}

    return $this;
}

sub deplace{
    my($this,$dx,$dy) = @_;
    $this->{X} += $dx;
    $this->{Y} += $dy;
}

sub toString{
    my($this) = @_;
    my $chaine = "Disque:";
    $chaine .= '('.$this->{X}.','.$this->{Y}.')'.$this->{RAYON};
    return $chaine;
}

sub surface{
    my($this) = @_;
    return pi*$this->{RAYON}**2;
}
1;

et Exo.pl

#!/usr/bin/perl -w
use strict;

use Disque;
use Data::Dumper;

my $disque;
my $chaine;
$disque = Disque->new();
print Dumper($disque);
$disque->deplace(1,2);
print Dumper($disque);
#$chaine = disque->toString();
#print $chaine."\n";
print disque->surface()."\n";

#4 Le 02/11/2006, à 22:51

JoelS

Re : [PERL]Utilisation des modules

Tu as oublié li sigil $ avant la chaîne disque dans la dernière ligne; ça doit être normalement :

print $disque->surface()."\n";

Hors ligne