Bonjour,
Bien que le problème soit mis en évidence sur un module je poste ici car il semble s'agir d'initialisation de chemin de fichier.

Je migre de Active_5.12 (32bits) en Strawberry_5.20 (64bits)

J'utilise le module Win32::MediaPlayer
Ce module fonctionne aussi bien en 5.12 qu'en 5.20

Le programme suivant fonctionne parfaitement dans les 2 versions de Perl.

NOUV.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
#!/usr/bin/perl
use strict;
use warnings;
use utf8;
use File::Spec;														# Gestion des noms des chemins sous tous les OS
use Win32::MediaPlayer;										# Pour jouer un fichier son
 
my $Time = 0;
my $winmm = new Win32::MediaPlayer;
my $Repertoire = "E:/_APPLI/Arabe/Ass_1/CDdecoup/LLc_009/";
my $Fic = "Tr_001.mp3";
 
my $fichier_Trad_Ora = File::Spec->catfile( $Repertoire, $Fic );
$winmm->load($fichier_Trad_Ora);
			$winmm->play;
			$winmm->volume(80);
			$Time = $winmm->length;
			sleep (4);
			$winmm->close;
Le problème apparaît lorsque j'utilise Win32::MediaPlayer dans un programme (ESS.pl) beaucoup plus long qui fait appel entre autre à plusieurs API Windows.

Suivant que je passe à Win32::MediaPlayer un chemin de fichier écrit en dur par moi-même ou un chemin généré par File::Spec et même par File::Spec::Win32, j'ai des comportements différents.

Avec le chemin en dur ça fonctionne toujours, avec un chemin généré, jamais, quelque soit la façon dont je triture le chemin :

Ceci fonctionne toujours, et bien d'autres essais...:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
$fichier_mp3 = "E:\\_APPLI\\Arabe\\Ass_1\\CDdecoup\\LLc_009\\FicTitre.mp3";
$fichier_mp3 = 'E://_APPLI//Arabe//Ass_1//CDdecoup//LLc_009//FicTitre.mp3';
...
$winmm->load($fichier_mp3);

Ceci ne fonctionne jamais, et bien d'autres essais...:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
$fichier_mp3 = File::Spec::Win32->catfile( $Repertoire, 'FicTitre.mp3' );
$winmm->load($fichier_mp3);
même après avoir trituré dans tous les sens :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
$fichier_mp3 = File::Spec::Win32->catfile( $Repertoire, 'FicTitre.mp3' );
my @TempArray = split (/\\/, $fichier_mp3);
print "ARRAY = @TempArray\n\n";
$fichier_mp3 = join("//", @TempArray);
ou encore :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
$fichier_mp3 = File::Spec::Win32->catfile( $Repertoire, 'FicTitre.mp3' );
my @TempArray = split (/\\/, $fichier_mp3);
print "ARRAY = @TempArray\n\n";
$fichier_mp3 = join("\\\\", @TempArray);
Je sèche dessus depuis 2 jours,
auriez-vous une idée ?
MERCI d'avance !

Ci-dessous divers essais, ceux qui fonctionnent correspondent aux chemins en dur,
Le dernier qui plante avec un chemin construit avec File::Spec::Win32