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

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 68
    Points : 38
    Points
    38
    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 éminent
    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
    Points : 8 586
    Points
    8 586
    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 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

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

    Informations forums :
    Inscription : Novembre 2008
    Messages : 68
    Points : 38
    Points
    38
    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
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

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

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

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

    Informations forums :
    Inscription : Novembre 2008
    Messages : 68
    Points : 38
    Points
    38
    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.

  7. #7
    Responsable Perl et Outils

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Points
    498 771
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my $req= my $dbh>prepare("select * from films order by titre;");
    Ta façon d'ecrire est bizarre.
    my $req= my $dbh
    De plus $dbh est censé se connecter à une base de données, mais ou?

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 68
    Points : 38
    Points
    38
    Par défaut
    Je fais cela pour pouvoir me déconnecter de ma BDD:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $dbh->disconnect();

  9. #9
    Responsable Perl et Outils

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Points
    498 771
    Par défaut
    oui mais pour te connecter à ta base?

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 68
    Points : 38
    Points
    38
    Par défaut
    La connexion se fait par le << require 'Connect.pl' >>.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    #!/usr/bin/perl
     
    use DBI;
    my $dbname='video_club';
    my $username='nom_utilisateur';
    my $password='mdp_utilisateur';
    my $dbh = DBI->connect("dbi:Pg:dbname=$dbname;host=127.0.0.1", $username, $password) || die DBI::errstr;

  11. #11
    Responsable Perl et Outils

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Points
    498 771
    Par défaut
    Ce n'est pas une bonne façon de faire.
    Voici ce que je fais d'habitude.

    Tu te fais une procédure connexion dans un .pm si tu veux.
    Ex :
    Ton ConnexionDBPerso.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
    #!/usr/bin/perl
    use warnings;
    use strict;
    use DBI;
     
    sub ConnexionDB {
     
      my $dbname='video_club';
      my $username='nom_utilisateur';
      my $password='mdp_utilisateur';
      my $dbh = DBI->connect("dbi:Pg:dbname=$dbname;host=127.0.0.1",   
        $username, $password) || die DBI::errstr;
     
      return $dbh;
    } 
     
    1;
    Dans ton script,



    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
    #!/usr/bin/perl
    use Consultation;
    use warnings;
    use strict;
    use Tk;
    use Tk::Photo;
    use Tk::JPEG;
    use ConnexionDBPerso;
     
    ##############################################
    #		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  ###
    	}

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 68
    Points : 38
    Points
    38
    Par défaut
    Merci bien désormais je voudrais le faire en objet où ce sera une méthode qui réalise la connexion en appelant les propriété de l'objet (Connect).

    Connect.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
     
    #!/usr/bin/perl
    package Connect;
     
    use strict;
    use warnings;
    use DBI;
     
    sub new
    	{
     
    	my $self = {};
     
    	$self->{dbname}	='video_club';
    	$self->{username} ='gerant';
    	$self->{password} ='hr83sb';
    	bless ($self);
    	return $self;
    	}
     
    sub connect_me
    	{
    		my $self = shift;
    		$self = DBI->connect("dbi:Pg:dbname=".$self->{dbname}.";host=127.0.0.1", $self->{username}, $self->{password}) || die DBI::errstr;
    	}
    1;
    Mon script a une erreur '$self = DBI', peut etre une erreur de connexion ?

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