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 :

Probleme export commande


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mars 2007
    Messages : 244
    Par défaut Probleme export commande
    Yop

    J'ai une fonction senddata() qui se trouve dans le fichier Service.pm
    j'exporte cette commande via

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    require Exporter;
    our @ISA = qw(Exporter);
    our @EXPORT = qw(init_sock init_service senddata);
    j'ai un autre fichier Parse.pm qui se trouve dans le même dossier
    quand j'essai d'utiliser la fonction senddata() dans ce fichier il me dit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Undefined subroutine &Parser::senddata called at source/Parser.pm line 38, <GEN0> line 21.
    moi comprend pas puisqu'il n'y a que cette commande qui ne semble pas s'exporter correctement.

  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
    Tu es sûr que tu n'as pas oublié le "use Service;" ? Sans le code de Parser.pm, nous ne pouvons que faire des suppositions.

    --
    Jedaï

  3. #3
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mars 2007
    Messages : 244
    Par défaut
    Yop
    je vous c/c les codes du programme parceque la je pige pas

    fichier main

    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
     
    use strict;
    use IO::Socket;
    use Getopt::Long;
     
    # inspuworld modules directory
    use lib 'source';
    use Utils;
    use Service;
    use Parser;
     
    # check options
    my %options;
     
    GetOptions(\%options,
               "config=s@");
    if (defined($options{'config'})) { print "config =$options{'config'}\n"; }
     
    # loading configuration & users access
    load_config;
    load_access;
     
    # creating socket,connect it to irc & listen
    init_sock;
    init_service;
    package Service

    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
     
    package Service;
    use strict;
    use Utils;
    use Parser;
    require Exporter;
    our @ISA = qw(Exporter);
    our @EXPORT = qw(init_sock init_service senddata);
     
    my $sock;
     
    sub init_sock
    {
    	$sock = IO::Socket::INET->new(PeerHost => getconf("ip"),
    	                              PeerPort => getconf("port"),
    	                              Proto => 'TCP');
     
    	die "Can't connect to server: $!" unless $sock;
    	$sock->autoflush(1);
        init_service();
        while (defined(my $line = <$sock>))
        {
    		chomp $line;
    		my @fields = split /\s+/, $line;
    		if (@fields>0)
    		{
    			parse_sockmsg($line);
    		}
    	}
    }
     
    sub init_service
    {
        # link to server & listen sock
        senddata("SERVER ".getconf("service")." ".getconf("pass")." 0 :".getconf("desc")."");
        senddata("BURST");
        senddata(":".getconf("service")." NICK ".time." ".getconf("nick")." ".getconf("host")." ".getconf("host")." ".getconf("ident")." ".getconf("modes")." 0.0.0.0 :".getconf("name")."");
        senddata(":".getconf("nick")." OPERTYPE Services");
        senddata(":".getconf("service")." FJOIN ".getconf("chan")." ".time()." :@,".getconf("nick")."");
        senddata("ENDOFBURST");
    }
     
    sub senddata
    {
    	my $line = shift;
    	my $send = "$line\r\n";
    	syswrite($sock, $send, length($send));
    	#print "Sent: $line\n" if $nofork;
    }
     
    1;
    package Parser

    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
     
    package Parser;
    use strict;
    use Utils;
    use Service;
    require Exporter;
    our @ISA = qw(Exporter);
    our @EXPORT = qw(parse_sockmsg);
     
    sub parse_sockmsg
    {
    	my $line = shift;
    	#print "Received: $line\n";
     
    #### PING
    	if ($line =~ /^:(.+?)\sPING\s(.+?)$/)
    	{
    		senddata(":".getconf("service")." PONG $1");
    	}
     
    #### NICK connection
    	if ($line =~ /^:(.+?)\sNICK\s.+?\s(.+?)\s(.+?)\s.+?\s(.+?)\s(.+?)\s.+?\s:(.+?)$/)
    	{
    	}
     
    #### NICK change
    	if ($line =~ /^:(.+?)\sNICK\s(.+?)$/)
    	{
    	}
     
    #### OPERTYPE
    	if ($line =~ /^:(.+?)\sOPERTYPE\s(.+?)$/)
    	{
    	}
     
    #### MODE
    	if ($line =~ /^:(.+?)\sMODE\s(.+?)\s(.+?)$/)
    	{
    	}
     
    #### QUIT
    	if ($line =~ /^:(.+?)\sQUIT\s:.+?$/)
    	{
    	}
     
    #### PRIVMSG
    	if ($line =~ /^:(.+?)\sPRIVMSG\s(.+?)\s:(.+?)$/)
    	{
    		my $nick = $1;
    		my $target = $2;
    		my $msg = $3;
    		my $botnick = getconf("nick");
    		if ($target =~ /^\Q$botnick\E$/i)
    		{
    			print "PRIVMSG $nick -> $target :$msg\n";
    		}
    	}
     
    #### END OF PARSE
     
    }
     
    1;
    package Utils

    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
     
    package Utils;
    require Exporter;
    use strict;
    our @ISA = qw(Exporter);
    our @EXPORT = qw(help load_config load_access getinfo getconf);
     
    my %config;
    my %access;
     
    sub getinfo
    {
    	my ($nick, $info) = @_;
    	return $access{lc($nick)}{$info} if defined(%access);
    }
     
    sub getconf
    {
    	my $option = shift;
    	return $config{$option} if defined(%config);
    }
     
    sub load_config
    {
    	my $path = "configuration/inspuworld.conf";
    	open FILE, "$path" or die "load_config() erreur: $!";
    	while (my $line = <FILE>)
    	{
    		chomp $line;
     
    		if ($line =~/^uw_(.+?)=(.+?)$/)
    		{
    			$config{"$1"} = "$2";
    		}
    	}
    	close FILE;
    }
     
    sub load_access
    {
    	my $path = "operateur/operator.list";
    	open FILE, "$path" or die "load_access() erreur: $!";
    	while (my $line = <FILE>)
    	{
    		chomp $line;
     
    		my @fields = split /\s+/, $line;
    	    if (@fields == 6)
    	    {
    			my $nick = lc($fields[0]);
    			@{$access{$nick}}{ qw(epoch pass host level suspend) } = @fields[1..5];
    		}
    	}
    	close FILE;
    }
     
    1;
    et voila, désolé du pavé.

  4. #4
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mars 2007
    Messages : 244
    Par défaut
    pom,

    je up le sujet parceque ca m'embete pas mal ce probleme j'ai beau cherché je ne voit pas d'ou ca vient ca me freine dans mon projet j'ai reussi a contrer le probleme en indiquant le nom du package dans la syntaxe

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $user->Service::sendnotice("Ok ".$user->nick." ".$user->uptime."");
    mais bon ca me plait pas ...

  5. #5
    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
    C'est parce que tu as une dépendance circulaire ... Tu pourrais contourner ça en prédéclarant les fonctions ou en faisant "use Parser" après la définition de senddata(), mais je pense que le mieux est de repenser un peu ta hiérarchie : un ensemble de modules qui sont tous mutuellement dépendants ne me semble pas très sain... (personnellement, je n'aurais pas créé un module entier (Parser) pour une simple routine qui appartient clairement à la gestion du serveur, et donc à Service, mais si tu y tiens, il y a d'autre moyens de faire ça plus proprement à mon avis)

    --
    Jedaï

Discussions similaires

  1. [Mysql]probleme de commande MySql
    Par stomerfull dans le forum Langage SQL
    Réponses: 1
    Dernier message: 27/01/2006, 08h34
  2. Probleme exportation de l exe
    Par Fry dans le forum MFC
    Réponses: 4
    Dernier message: 06/01/2006, 17h08
  3. Réponses: 7
    Dernier message: 22/12/2005, 09h56
  4. probleme la commande OR dans SQL
    Par amelhog dans le forum Langage SQL
    Réponses: 10
    Dernier message: 19/08/2005, 12h22
  5. [langage] Probleme avec commande system et code
    Par Ludo167 dans le forum Langage
    Réponses: 3
    Dernier message: 14/07/2004, 12h01

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