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 :

script Perl incompatible de Windows 2000 à XP


Sujet :

Langage Perl

  1. #1
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 572
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 572
    Points : 2 014
    Points
    2 014
    Par défaut script Perl incompatible de Windows 2000 à XP
    Salut, c'est encore moi

    Un script Perl conçu il y a quelques années et qui fonctionne très bien sur un poste équipé de Windows 2000 ne marche plus sous Windows XP.

    Versions Perl installées :
    - Windows 2000 : v5.6.1 build 635
    - Windows XP : v5.8.8 build 822
    Les deux versions proviennent d'ActiveState.

    Le script en question ne fait strictement rien de méchant : il fait un chdir() pour accéder à un fichier d'entrée qu'il ouvre pour le lire. Pour les besoins du log, la fonction localtime() est utilisée au lancement du programme pour indiquer la date et l'heure du jour. Ensuite, le script se contente de faire du warn dans le log ou du print dans un fichier de sortie ou sur la console Ms-Dos. Rien de bien sorcier !

    Dans les deux cas (2000 et XP), tout va bien : la fonction localtime fonctionne, tout ce qui doit être écrit dans le log l'est parfaitement. Le truc qui ne fonctionne pas, c'est qu'avant d'écrire dans un fichier de sortie non encore ouvert, j'affiche un bête print sur la console :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    print "Ecriture dans fichier de sortie\n";
    open(SORTIE, etc etc.........);
    Ce print là s'affiche bien sous 2000 et le programme ouvre bien le fichier de sortie et va jusqu'à son terme normal. Sous XP, ce print là ne s'affiche pas !!!

    Encore plus fort : sous XP, si je rajoute ça dans le code ci-dessus :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    print "AVANT print\n";
    print "Ecriture dans fichier de sortie\n";
    print "APRES print\n";
    open(SORTIE, etc etc.........);
    Sur la console Ms-Dos, j'ai ça qui s'affiche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    AVANT print
    APRES print
    Comme vous le voyez, le print niché au milieu ne s'affiche pas et bien entendu, le programme n'écrit rien dans le fichier de sortie. Il tourne en boucle, tel un zombi de base.

    J'ai testé de paramétrer l'execution de perl.exe sur le poste XP avec une compatibilité d'exécution en mode Windows 2000. Pas efficace du tout.

    Question : quelqu'un sait ce qui se passe ???

  2. #2
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 572
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 572
    Points : 2 014
    Points
    2 014
    Par défaut
    Voici le code. Par soucis de confidentialité, j'ai renommé des noms de variables en POUET ou TOTO mais je n'ai touché à rien d'autre.

    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
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    #!C:perl/bin/perl -w
    use strict;
    use warnings;
     
    # VARIABLES
    my $PROGRAMME = "POUET.pl";
    my $VERSION = "1.0.1";
    my $AnneeMois = 0;
    my $Annee = 0;
    my $DateTraitement = 0;
    my $Log = "";
    my %Rep;
    my $FicTOTO;
    my $i = 0;
     
    # initialisation
    $DateTraitement = DonneDate();
    if ($DateTraitement =~ /^([0-9]{4})([0-9]{2}).+$/)
    {
    	$AnneeMois = "$1$2";
    	$Annee = $1;
    	$Log = "POUET$DateTraitement.log";
    	$Rep{IN} = "M:/Export/TOTO/$Annee";
    	$Rep{OUT} = "M:/Export/POUET/$AnneeMois";
    }
    else
    {
    	print "Erreur de fonctionnement du programme lors du traitement de la date du jour !!!\n";
    	print "Appuyez sur ENTREE pour fermer cette fenetre\n";
    	<STDIN>;
    	exit();
    }
     
    # ouverture du log
    open(STDERR, ">$Log") or die();
    warn "$PROGRAMME v$VERSION\n";
    warn "Traitement lancé le $DateTraitement à ", DonneHeure(), "\n";
    warn "Répertoire d'entrée  : $Rep{IN}\n";
    warn "Répertoire de sortie : $Rep{OUT}\n";
    warn "Période concernée    : $AnneeMois\n";
    warn "------------------------------------------------------------------------------------\n";
     
    # création des fichiers de sortie pour les PDF à extraire (projets et normes) + fichier de sortie biblio
    open (POUET, ">biblio.txt") or die("Création du fichier biblio.txt erreur : $!\n");
    open (PDF_NORME, ">pdf_norme.txt") or die("Création du fichier pdf_norme.txt erreur : $!\n");
    open (PDF_PROJET, ">pdf_projet.txt") or die("Création du fichier pdf_projet.txt erreur : $!\n");
    warn "Fichiers biblio.txt, pdf_norme.txt et pdf_projet.txt créés dans $Rep{OUT}\n";
     
    # recherche du dernier fichier TOTO
    chdir($Rep{IN}) or die("Impossible d'accéder aux fichiers de données de TOTO dans $Rep{IN} : $!\n");
    my @Temp = <*>;
    foreach(@Temp)
    {
    	push(@_, $_) if ($_ =~ /^TOTO_ACCENTS_GENIE.+/);
    }
    warn scalar(@_), " fichier(s) de données TOTO trouvé(s) dans $Rep{IN}\n\n";
    $FicTOTO = $_[scalar(@_)-1];
    warn "Le fichier qui est utilisé est $FicTOTO\n\n";
     
    # lecture du fichier TOTO
    warn DonneHeure(), ", début du traitement du fichier $FicTOTO\n";
     
     
    < *** le script lancé par un poste XP se bloque ICI *** >
     
     
    print "Lecture du fichier $FicTOTO en cours";
    open(DATA, $FicTOTO) or die("Lecture du fichier $FicTOTO erreur : $!\n");
    my $Numdos;
    my $compteur = 0;
    while(<DATA>){
        foreach my $tuple (split(/\|/, $_))
    	{
            # le temps de lecture du fichier étant assez long, on affiche qq chose à l'écran pour dire qu'il se
    		# passe quelque chose ;o)
    		++$compteur;
    		print "." if ($compteur == 1000);
    		$compteur = 0 if ($compteur == 1000);
     
    		# récup des données
    		if ($tuple =~ /^AC=FA/ && !($tuple =~ /\@IF=\d/) )
    		{
                $i++;
                print POUET "$tuple|";
                if ($tuple =~ /\@UP=N/)
    			{
                    if ($tuple =~ /^AC=FA(\d\d\d\d\d\d)/)
    				{
                        $Numdos = "FA$1";
                        if($tuple =~ /\@TS=DC/)
    					{
                            print PDF_PROJET "$Numdos\n";
                        }
    					else
    					{
                            print PDF_NORME "$Numdos\n";
                        }
                    }
                }
            }
        }
    }
    close(DATA);
    close(POUET);
    close(PDF_NORME);
    close(PDF_PROJET);
    warn "\t$i documents traités\n";
    warn DonneHeure(), ", fin du traitement du fichier $FicTOTO\n\n";
     
    # création des dossiers dans le répertoire de sortie s'ils n'existent pas
    if (! -d $Rep{OUT})
    {
    	mkdir($Rep{OUT}, 0777) or die("Création du dossier $Rep{OUT} erreur : $!\n");
    }
    if (! -d "$Rep{OUT}/PDF")
    {
    	mkdir("$Rep{OUT}/PDF", 0777) or die("Création du dossier $Rep{OUT}/PDF erreur : $!\n");
    }
     
    # fin de traitement
    warn DonneHeure(), ", FIN DU PROGRAMME\n\n\n\n";
     
     
    =pod
        FONCTION    DonneDate()
        RECOIT      rien.
        RENVOI      une chaîne.
        FAIT        retourne la date du jour au format AAAAMMJJ.
    =cut
    sub DonneDate
    {
        my (undef,undef,undef,$Mjour,$Mois,$Annee,undef,undef,undef) = localtime(time);
        $Annee += 1900;
        $Mois += 1;
        $Mois = 1 if ($Mois == 13);
        $Mois = '0' . $Mois if ($Mois < 10);
        $Mjour = '0' . $Mjour if ($Mjour < 10);
        return "$Annee$Mois$Mjour";
    }
     
    =pod
        FONCTION    DonneHeure()
        RECOIT      rien.
        RENVOI      une chaîne.
        FAIT        retourne l'heure actuelle au format HH:MM:SS.
    =cut
    sub DonneHeure {
        my ($Sec,$Min,$Heure,undef,undef,undef,undef,undef,undef) = localtime(time);
        $Sec = '0' . $Sec if ($Sec < 10);
        $Min = '0' . $Min if ($Min < 10);
        $Heure = '0' . $Heure if ($Heure < 10);
        return "$Heure:$Min:$Sec";
    }
    Hum, et le code ne vient pas de moi

  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
    rajoute peut etre un

  4. #4
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 572
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 572
    Points : 2 014
    Points
    2 014
    Par défaut
    En rajoutant ta ligne, le print qui ne s'affichait pas s'affiche désormais.

    MAIS le script bloque juste après. Il bloque là :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    open(DATA, $FicTOTO) or die("Lecture du fichier $FicTOTO erreur : $!\n");
    On ne sait pas ce qu'il fait puisque le die n'est pas testé.

  5. #5
    Membre éprouvé Avatar de MarneusCalgarXP
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    911
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 911
    Points : 1 118
    Points
    1 118
    Par défaut
    Citation Envoyé par Arioch Voir le message
    Un script Perl conçu il y a quelques années et qui fonctionne très bien sur un poste équipé de Windows 2000 ne marche plus sous Windows XP.

    Versions Perl installées :
    - Windows 2000 : v5.6.1 build 635
    - Windows XP : v5.8.8 build 822
    Les deux versions proviennent d'ActiveState.
    As-tu testé le même script sous Windows 2000 mais en upgradant ta version de Perl à la v5.8.8 build 822 ? Ca n'a peut-être rien à voir avec la migration à XP...

    Je ne répond à aucune question technique par MP.

    Si votre problème est réglé, n'oubliez pas Dans tous les cas

  6. #6
    Membre éprouvé Avatar de MarneusCalgarXP
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    911
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 911
    Points : 1 118
    Points
    1 118
    Par défaut
    Citation Envoyé par Arioch Voir le message
    En rajoutant ta ligne, le print qui ne s'affichait pas s'affiche désormais.

    MAIS le script bloque juste après. Il bloque là :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    open(DATA, $FicTOTO) or die("Lecture du fichier $FicTOTO erreur : $!\n");
    On ne sait pas ce qu'il fait puisque le die n'est pas testé.
    Tu trouveras peut-être des infos dans ton fichier "POUET$DateTraitement.log", vu que tu y as redirigé STDERR...

    Je ne répond à aucune question technique par MP.

    Si votre problème est réglé, n'oubliez pas Dans tous les cas

  7. #7
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 572
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 572
    Points : 2 014
    Points
    2 014
    Par défaut
    Citation Envoyé par MarneusCalgarXP Voir le message
    As-tu testé le même script sous Windows 2000 mais en upgradant ta version de Perl à la v5.8.8 build 822 ? Ca n'a peut-être rien à voir avec la migration à XP...
    Impossible de le savoir car nos postes 2000 et XP sont fortement verrouillés côté utilisateurs.

    On n'a le droit de rien installer ni désinstaller.

  8. #8
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 572
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 572
    Points : 2 014
    Points
    2 014
    Par défaut
    Citation Envoyé par MarneusCalgarXP Voir le message
    Tu trouveras peut-être des infos dans ton fichier "POUET$DateTraitement.log", vu que tu y as redirigé STDERR...
    Et non, aucune info autre que les lignes que je warn()

  9. #9
    Membre éprouvé Avatar de MarneusCalgarXP
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    911
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 911
    Points : 1 118
    Points
    1 118
    Par défaut
    Est-ce que la variable $FicTOTO est bien renseignée et correspond bien à un fichier qui existe ?

    Si tu rajoutes un "\n" à

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print "Lecture du fichier $FicTOTO en cours";
    , que tu rajoutes une ligne de débug après le open, et que tu utilises le open à 3 paramètres, est-ce que tu la vois dans le stdout ? ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    print "Lecture du fichier $FicTOTO en cours\n";
    open(DATA, '<', $FicTOTO) or die("Lecture du fichier $FicTOTO erreur : $!\n");
    print "ouverture ok de $FicTOTO\n";

    Je ne répond à aucune question technique par MP.

    Si votre problème est réglé, n'oubliez pas Dans tous les cas

  10. #10
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 572
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 572
    Points : 2 014
    Points
    2 014
    Par défaut
    Citation Envoyé par MarneusCalgarXP Voir le message
    Est-ce que la variable $FicTOTO est bien renseignée et correspond bien à un fichier qui existe ?
    Oui oui, le fichier existe bel et bien. J'ai même fait des tests où je donnais le nom du fichier en dur dans le script pour être bien sûr qu'il ne pouvait pas le louper.

    Citation Envoyé par MarneusCalgarXP Voir le message
    Si tu rajoutes un "\n" à

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print "Lecture du fichier $FicTOTO en cours";
    Je l'ai rajouté.

    Citation Envoyé par MarneusCalgarXP Voir le message
    , que tu rajoutes une ligne de débug après le open, et que tu utilises le open à 3 paramètres, est-ce que tu la vois dans le stdout ? ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    print "Lecture du fichier $FicTOTO en cours\n";
    open(DATA, '<', $FicTOTO) or die("Lecture du fichier $FicTOTO erreur : $!\n");
    print "ouverture ok de $FicTOTO\n";
    J'ai rajouté le open à 3 paramètres + rajouté le print juste après ouverture.

    Tous les print s'affichent, donc le script ouvre bien le fichier. Il ne va pas plus loin, il reste sempiternellement bloqué après le while. Comme s'il ne savait pas spliter la ligne qu'on lui demande d'éclater dans le foreach.

    Autre test fait à l'instant : ne pas rediriger mes warn dans un fichier log mais à l'écran (canal STDERR non redirigé dans un log) : tous les warn en début de script s'affichent à l'écran, noyés avec les print.

    Quand je pense que ce prog fonctionne en 2 minutes sur un vieux PC Windows 2000 et qu'avec une bête de course (bi-processeur, facilement 4 fois + de RAM que l'autre bécane) sous XP, il tourne dans le vide...

  11. #11
    Membre éprouvé Avatar de MarneusCalgarXP
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    911
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 911
    Points : 1 118
    Points
    1 118
    Par défaut
    Comme je t'ai dit précédemment, ca n'a probablement pas de rapport avec XP...

    Il te reste à débugger ton programme, qui utilise beaucoup de variables implicites. Rajoute des lignes de debug dans la boucle, et regarde ou ca bloque:

    (et surtout, rajoute un chomp après avoir lu ta ligne, sinon le dernier élément contiendra un "\n")

    L'erreur la plus probable est un problème d'écriture dans un fichier sur le lecteur réseau qui n'est peut-être pas monté correctement (bon login/mdp pour droits en écriture)...

    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
     
    while(<DATA>){
     
        chomp;
        print("ligne : [$_]\n");
        foreach my $tuple (split(/\|/, $_))
    	{
                    print " * tuple : [$tuple]\n";
            # le temps de lecture du fichier étant assez long, on affiche qq chose à l'écran pour dire qu'il se
    		# passe quelque chose ;o)
    		++$compteur;
    		print "." if ($compteur == 1000);
    		$compteur = 0 if ($compteur == 1000);
     
    		# récup des données
                    print "    - avant check regexp 1 tuple\n";
    		if ($tuple =~ /^AC=FA/ && !($tuple =~ /\@IF=\d/) )
    		{
                         print "    - check ok\n";
                $i++;
                print "    - avant print POUET\n";
                print POUET "$tuple|";
                print "    - après print POUET\n";
     
                print "    - avant check regexp 2 tuple\n";
                if ($tuple =~ /\@UP=N/)
    			{
                            print "    - check ok\n";
     
                    print "    - avant check regexp 3 tuple\n";
                    if ($tuple =~ /^AC=FA(\d\d\d\d\d\d)/)
    				{
                                     print "    - check ok\n";
                        $Numdos = "FA$1";
                        print "    - avant check regexp 4 tuple\n";
                        if($tuple =~ /\@TS=DC/)
    					{
                                             print "    - check ok\n";
     
                            print "    - avant print PDF_PROJECT\n";
                            print PDF_PROJET "$Numdos\n";
                            print "    - après print PDF_PROJECT\n";
                        }
    					else
    					{
                            print "    - avant print PDF_NORME \n";
                            print PDF_NORME "$Numdos\n";
                            print "    - après print PDF_NORME \n";
                        }
                    }
                }
            }
        }
    }

    Je ne répond à aucune question technique par MP.

    Si votre problème est réglé, n'oubliez pas Dans tous les cas

  12. #12
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 572
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 572
    Points : 2 014
    Points
    2 014
    Par défaut
    Le problème vient de là je pense :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    foreach my $tuple (split(/\|/, $_))
    Il faut savoir que le fichier d'entrée ne contient qu'une ligne. Ce fichier pèse facilement 104 Mo actuellement.

    Le chomp() n'a pas lieu d'être car aucune recherche après le split de la ligne ne porte sur une fin de chaine.

    Et je le répète : ce script a encore marché hier avec le PC sous 2000. Heureusement d'ailleurs, sinon on ne pouvait pas livrer le fichier résultat.

  13. #13
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 572
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 572
    Points : 2 014
    Points
    2 014
    Par défaut
    Je viens de tester un autre programme qui, habituellement, fonctionne fort bien lui aussi.

    C'est une appli Tk dans laquelle on doit lui indiquer (dans une zone d'entrée) le chemin d'accès d'un répertoire. Ensuite, l'appli fait un test -d pour s'assurer que le répertoire est bien un répertoire et qu'il existe.

    Je vous le donne en mille : ça ne fonctionne plus sous XP !!! Le test du -d renvoie faux au lieu de vrai. Bien sûr, ça marche sous 2000

    Alors question : comment bien faire cohabiter 2 versions Perl sur le même PC ? J'ignore si ça vient de Perl v5.8.8 mais vu que ça marche avec une version en 5.6...

  14. #14
    Membre éprouvé Avatar de MarneusCalgarXP
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    911
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 911
    Points : 1 118
    Points
    1 118
    Par défaut
    Tu peux faire cohabiter 2 versions de perl en les installant dans 2 répertoires différents, tout simplement.

    Sinon, je viens de tester, sous windows XP et perl 5.8.8, le -d fonctionne très bien...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    use strict;
    use warnings;
     
    my $windir = $ENV{'WINDIR'};
     
    if ( -d $windir ) {
    	print "ok : $windir existe\n";
    } else {
    	print "ko : $windir n'existe pas\n";
    }
    Autre question : utilises-tu cygwin par hasard ?

    Je ne répond à aucune question technique par MP.

    Si votre problème est réglé, n'oubliez pas Dans tous les cas

  15. #15
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 572
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 572
    Points : 2 014
    Points
    2 014
    Par défaut
    Citation Envoyé par MarneusCalgarXP Voir le message
    Tu peux faire cohabiter 2 versions de perl en les installant dans 2 répertoires différents, tout simplement.

    Sinon, je viens de tester, sous windows XP et perl 5.8.8, le -d fonctionne très bien...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    use strict;
    use warnings;
     
    my $windir = $ENV{'WINDIR'};
     
    if ( -d $windir ) {
    	print "ok : $windir existe\n";
    } else {
    	print "ko : $windir n'existe pas\n";
    }
    Autre question : utilises-tu cygwin par hasard ?
    Ton bout de code donne chez moi (sous XP bien sûr) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >perl -w Document.pl
    ok : C:\WINDOWS existe
    >Exit code: 0
    Et je n'utilise pas Cygwin.

  16. #16
    Membre éprouvé Avatar de MarneusCalgarXP
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    911
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 911
    Points : 1 118
    Points
    1 118
    Par défaut
    Ok, donc si le problème ne vient pas du "-d", il vient probablement d'ailleurs dans le code

    (pour cygwin, je posais la question, parce que la version installée avec cygwin est buggée, et il faut virer l'executable "perl.exe" dans le répertoire bin de cygwin pour avoir accès au perl de activestate)

    Je ne répond à aucune question technique par MP.

    Si votre problème est réglé, n'oubliez pas Dans tous les cas

  17. #17
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 572
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 572
    Points : 2 014
    Points
    2 014
    Par défaut
    Citation Envoyé par MarneusCalgarXP Voir le message
    Ok, donc si le problème ne vient pas du "-d", il vient probablement d'ailleurs dans le code

    (pour cygwin, je posais la question, parce que la version installée avec cygwin est buggée, et il faut virer l'executable "perl.exe" dans le répertoire bin de cygwin pour avoir accès au perl de activestate)
    J'ai un collègue qui va voir sa bécane passer de 2000 à XP. Les gars du service info viennent de passer, on leur a demandé de mettre une v5.6.1 sur le futur poste au lieu de la 5.8.8.

    On verra bien si ça vient de la version de Perl ou si c'est l'environnement XP qui est bizarre.

  18. #18
    Membre éprouvé Avatar de MarneusCalgarXP
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    911
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 911
    Points : 1 118
    Points
    1 118
    Par défaut
    Autre question : est-ce que tu fais appel à un lecteur réseau ?

    Je ne répond à aucune question technique par MP.

    Si votre problème est réglé, n'oubliez pas Dans tous les cas

  19. #19
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 572
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 572
    Points : 2 014
    Points
    2 014
    Par défaut
    Citation Envoyé par MarneusCalgarXP Voir le message
    Autre question : est-ce que tu fais appel à un lecteur réseau ?
    Oui, les deux scripts Perl dont je parle dans ce topic sont à la fois stockés sur un réseau local ET travaillent sur des dossiers du réseau.

  20. #20
    Membre éprouvé Avatar de MarneusCalgarXP
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    911
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 911
    Points : 1 118
    Points
    1 118
    Par défaut
    J'ai fait des tests d'existence sur des répertoires sur des lecteurs réseau, le -d fonctionne aussi (c'est rassurant ).

    Je ne répond à aucune question technique par MP.

    Si votre problème est réglé, n'oubliez pas Dans tous les cas

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Mettre un script Perl en service Windows ?
    Par spax dans le forum Windows
    Réponses: 6
    Dernier message: 14/11/2008, 11h07
  2. Réponses: 37
    Dernier message: 10/09/2008, 15h16
  3. probleme script perl sous windows
    Par wirgilus dans le forum Langage
    Réponses: 4
    Dernier message: 05/06/2008, 11h34
  4. Utiliser un script Perl comme commande windows
    Par mquentin dans le forum Langage
    Réponses: 2
    Dernier message: 12/03/2007, 15h39
  5. Script de redemarrage de windows server 2000
    Par perturabo dans le forum Windows
    Réponses: 2
    Dernier message: 20/01/2006, 08h20

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