strftime(), selon cpan.org:Perl: ne peut pas passer un « à la volée » tableau à un sous
print strftime($template, @lt);
Je ne peux pas comprendre la bonne recette de code Perl pour celui-là. Il garde de rapporter une erreur où j'appelle strftime():
...
use Date::Format;
...
sub parse_date {
if ($_[0]) {
$_[0] =~ /(\d{4})/;
my $y = $1;
$_[0] =~ s/\d{4}//;
$_[0] =~ /(\d\d)\D(\d\d)/;
return [$2,$1,$y];
}
return [7,7,2010];
}
foreach my $groupnode ($groupnodes->get_nodelist) {
my $groupname = $xp->find('name/text()', $groupnode);
my $entrynodes = $xp->find('entry', $groupnode);
for my $entrynode ($entrynodes->get_nodelist) {
...
my $date_added = parse_date($xp->find('date_added/text()', $entrynode));
...
$groups{$groupname}{$entryname} = {...,'date_added'=>$date_added,...};
...
}
}
...
my $imday = $maxmonth <= 12 ? 0 : 1;
...
while (my ($groupname, $entries) = each %groups) {
...
while (my ($entryname, $details) = each %$entries) {
...
my $d = @{$details->{'date_added'}};
$writer->dataElement("creation", strftime($date_template, (0,0,12,@$d[0^$imday],@$d[1^$imday]-1,@$d[2],0,0,0)));
}
...
}
...
Si j'utilise() pour passer le tableau requis par strftime(), je reçois: Type de arg 2 à Date :: Format :: strftime doit être array (not list) à ./blah.pl ligne 87, près de "))"
Si j'utilise [] pour passer le tableau requis, j'obtiens: Type d'argument 2 à Date :: Format: : strftime doit être array (pas la liste anonyme ([])) à ./blah.pl ligne 87, près de "])"
Comment puis-je transmettre un tableau à la volée à un sub en Perl? Cela peut facilement être fait avec PHP, Python, JS, etc. Mais je ne peux pas le comprendre avec Perl.
EDIT: Je réduit le code à ces quelques lignes, et j'ai toujours eu le même problème:
#!/usr/bin/perl
use warnings;
use strict;
use Date::Format;
my @d = [7,13,2010];
my $imday = 1;
print strftime(q"%Y-%m-%dT12:00:00", (0,0,12,$d[0^$imday],$d[1^$imday]-1,$d[2],0,0,0));
Cela fonctionne aussi! Mieux, puisqu'il évite le besoin d'une variable d'espace réservé –