IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Perl Discussion :

PERL OBJET appel de classe


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 68
    Par défaut PERL OBJET appel de classe
    Voici mon code:

    TestEssaie.pl
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    use Test;
    $person=Test->new();
     
    $person->name("Jason");
    $person->age(30);
    $person->peers("Claude", "Albert", "Bertrand");
     
    push @All_Recs, $person; #stock ds un tableau
     
    printf "%s is %d years old.\n", $him->name, $him->age;
    Test.pl
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    package Test;
    use strict;
     
     
    ##############################################
    #		Constucteur objet Test				 #
    ##############################################
     
    sub new
    	{
    		my $self = {};
    		$self-> {NAME} 	= undef;
    		$self-> {AGE}  	= undef;
    		$self-> {PEERS}	= [];
    		bless ($self);
    		return $self;
    	}
     
    ##############################################
    #		Méthodes pour accéder aux données    #
    #											 #
    ##############################################
     
     
    sub name
    	{
    		my $self = shift;
    		if (@_) {$self->{NAME} = shift} 
    		return $self->{NAME};
    	}
     
    sub age
    	{
    		my $self = shift;
    		if (@_) {$self->{AGE} = shift}
    		return $self->{AGE};
    	}
     
    sub peers
    	{
    		my $self =shift;
    		if (@_) { @{ $self->{PEERS} } = @_ }
    		return @{ $self->{PEERS} };
    	}

    Mon erreur est la suivante :
    Can't locate object method "new" via package "Test"

  2. #2
    Expert confirmé
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Par défaut
    Pour un module, le nom du fichier doit être Test.pm pas Test.pl, par ailleurs Test fait partie des modules distribués par défaut avec Perl, donc je te suggère de choisir un autre nom pour ton module, ça évitera bien des confusions.

    --
    Jedaï

  3. #3
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    Sans oublier qu'il manque le à la fin de ton module

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 68
    Par défaut
    Merci à vous je vais remédier à tout cela, djibril tu as eu mon message perso à propos de PERL sur Eclipse ?

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 68
    Par défaut
    Cela fonctionne comme je le veux merci.

    Je ne pensais pas que le "1;" ait autant d'importance

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 68
    Par défaut
    Désormais je commence à rentrer dans le vif de mon application.

    Je vous l'explique, j'ai pour l'instant un fichier 'Acceuil.pl' qui constitue ma page où se trouve des boutons d'évennement qui ouvriront des fenêtres.
    Pour mon cas le fichier 'Consultation.pm' est un module qui réalise une requête sur ma BDD puis qui affiche le résultat de cette dernière dans une nouvelle fenêtre.

    Acceuil.pl
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    #!/usr/bin/perl -w
    use Consultation;
    use Tk;
    use Tk::Photo;
    use Tk::JPEG;
    use DBI; 
     
    ########## Connexion à la BDD     #########
    require "connect.pl";
    ########## FIN Connexion à la BDD #########
     
     
    ########## Invocation objet Consulter #####
    $consultation=Consultation->new();  # Appel le constructeur de l'objet Consultation
     
    ######### Construction fenêtre + paramètres #######
    	$consultation = my $fen = Test -> new();
    					$fen = MainWindow->new(-height=> '1000');
    					$fen->title("Acceuil - Video_Club V 0.1");	   
    					$fen->geometry("900x500+250+250"); # Taille (L*l) + disposition à l'affichage
    					Fill_window($fen);
     
     
     
     
    ########## Paramètres de la fenêtre principale d'acceuil ##########
     
    sub Fill_window
    {
    	my ($window, $header)= @_;
     
    	$window-> Frame(-relief => 'groove' , -borderwidth => 2);
     
    	my ($button)=@_;
     
    	my $boutons = $button-> Button(
    									-text => "Consulter",-activebackground => 'green',
    							 		-command => \&Consultation # Appel de la méthode getFilmsDispo de l'objet Consulter
    							 		 )->pack(-side=>'left', -anchor=>'w');
     
    	$boutons    = $button-> Button(
    									-text => "Reserver",-activebackground => 'green',
    							 		-command => \&Reserver
    							 		 )->pack(-side=>'left', -anchor=>'w');
     
    	my $text_news = $window -> Label (-text => "Dernier arrivage: ")->pack(-side=> 'top', -anchor => 'ne');
     
     
    	# Invocation & affichage image pour la news
    	my $objImage  = $window-> Photo (-format=>'jpeg', -file => '/home/abu/hell.jpeg');
    	my $objImage2 = $window-> Photo (-format=>'jpeg', -file => '/home/abu/image.jpeg');
    	my $label1 = $window   -> Label (-image => $objImage);
    	my $label2 = $window   -> Label (-image => $objImage2);
     
    	$label1 -> pack (-side=>'right', -anchor => 'ne');
    	$label2 -> pack (-side=>'right', -anchor => 'ne');
     
    	$boutons = $window-> Button(
    						-text => "Quit Video_Club",-activebackground => 'red',
    				 		-command => [$window => 'destroy']
    				 		 );	 		
    	$boutons -> pack (-side => 'right', -anchor => 'se')
     
     
    }
     
    sub Consultation
    {
    	$consultation->fen_consultation;
    }
     
    sub Quitter
    {
    	exit(0);
    }
     
    #### Appel au gestionnaire d'évènements ####
    MainLoop;
    Consultation.pm
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
     
    #!/usr/bin/perl -w
    package Consultation;
    use strict;
    use Tk;
    use DBI;
     
    	########## Connexion à la BDD     #########
    	require "connect.pl";
    	########## FIN Connexion à la BDD #########
     
     
    ##############################################
    #		Constucteur objet Consulter			 #
    ##############################################
    sub new 
    	{
    		my $self= {};
    		$self	-> {fen_consultation} = undef;
    		bless($self);
    		return $self;
     
    	}
     
     
    sub fen_consultation
    	{
    	my $self = shift;
    	if (@_) {$self->{fen_consultation} = shift} 
     
    	my $fen_consult_dispo = MainWindow->new(-height=> '1000');
    			$fen_consult_dispo->title("Acceuil - Video_Club V 0.1");	   
    			$fen_consult_dispo->geometry("700x350+350+350"); # Taille (L*l) + disposition à l'affichage	
     
    			my $bar_consult_dispo = $fen_consult_dispo->Frame(-relief => 'groove' , -borderwidth => 2);
     
    			my $menu_bar_consult_dispo = $bar_consult_dispo->Menubutton(
    											-text => 'Application',		# Libel du bouton
    											-font => '{Garamond} 10',	# Police
    											-tearoff => 0,
    											-menuitems => [
    																[
    																'command' => 'Quitter',
    																-font => '{Garamond} 10',
    																-command => sub {$fen_consult_dispo->destroy}
    																]
    														  ]		  
    																		);
    			$menu_bar_consult_dispo -> pack(-side => 'left');
    			# Affichage barre de menu ancrée en [haut au centre de la fenêtre -->y] [haut sur le tout le long de la fenêtre]
    			$bar_consult_dispo -> pack(-side => 'top', -anchor => 'n', -fill =>'x');
     
     
    			my $req= my $dbh->prepare("select * from films order by titre;");
    			my $resultat = $req->execute || die DBI::errstr;
    			while ($resultat = $req->fetchrow_array)
    				{
    					$fen_consult_dispo->Label(-text=>"$resultat")->pack;
    				}
     
    			return $self->{fen_consultation};
     
    			$req->finish;
    			$dbh->disconnect();	
    			###    FIN requêtage  ###
    	}
    Qu'est-ce que vous en pensez ?

    J'ai l'erreur suivante :
    Tk::Error: Can't call method "prepare" on an undefined value at /home/abu/workspace/Video_Club/Consultation.pm line 54.

Discussions similaires

  1. Réponses: 1
    Dernier message: 22/07/2014, 22h40
  2. Appeler une classe java en perl
    Par missllyss dans le forum Langage
    Réponses: 1
    Dernier message: 04/06/2008, 15h35
  3. Réponses: 11
    Dernier message: 16/10/2004, 18h14
  4. base de données objet appelée ozone
    Par enti dans le forum Autres SGBD
    Réponses: 3
    Dernier message: 01/03/2004, 08h28
  5. [MFC]arriere plan pour un objet de la classe CStatic
    Par gabriel knight dans le forum MFC
    Réponses: 13
    Dernier message: 28/07/2003, 10h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo