Manifestement, la ligne my $date = `date +%d%m%y`; renvoie une valeur terminée par un "\n"
Plutôt que faire un appel au shell, utilisez directement les fonctions perl comme localtime
my $date = join "", map { sprintf("%02d", ($_ + (0, 1, -100)[$i++])) }(localtime)[3..5];
devrait faire l'affaire.
Explication de cette ligne
Je pars de localtime
ça renvoie une liste qu'on peut récupérer ainsi:
my ( $sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime() ;
ce qui nous intéresse ici, c'est $mday, $mon, $year
que je récupère directement comme sous liste: (localtime)[3..5];
problème: c'est décalé:
pour les jours, c'est OK, mais pour les mois, ça commence à 0 pour janvier, et pour les années, 0 c'est 1900.
Il faut donc décaler les valeurs:
my ( $mday, $mon, $year ) = (localtime)[3..5];
$mon += 1;
$year += 1900;
En perl, on peut faire travailler directement sur la liste, en faisant
my ( $mday, $mon, $year ) = map {$_ + (0, 1, 1900)[$i++]}(localtime)[3..5];
Comme dans votre cas on veut que la partie de l'année a partir de 2000, au lieu d'ajouter 1900, on va retirer 100
my ( $mday, $mon, $year ) = map {$_ + (0, 1, -100)[$i++]}(localtime)[3..5];
On veut de plus que chaque valeur soit sur deux chiffres, avec un 0 initial si nécessaire, on fait alors
my ( $mday, $mon, $year ) = map { sprintf("%02d", $_ + (0, 1, -100)[$i++])}(localtime)[3..5];
Enfin, on concatène la liste dans une variable
my $date = join "", map { sprintf("%02d", $_ + (0, 1, -100)[$i++])}(localtime)[3..5];
A+,
---------------
There's more than what can be linked! -- Iyashikei Anime Forever! -- AngularJS c'est un framework d'engulé! --