I sais ce type de chose que je veux faire l'habitude de travailler en 5.8. Est-ce que je fais quelque chose de mal? Y a-t-il un moyen d'y retourner en Perl 5.10?Perl 5.10 at-il gâché quelque chose avec des prototypes?
est ici le module:
package TableMod;
use base qw<Exporter>;
our @EXPORT_OK = qw<mod_table>;
use Data::Dumper;
sub mod_table (\%@) { print Dumper(@_); }
1;
Et voici le script:
use strict;
use warnings;
use Data::Dumper;
use Test::More tests => 4;
sub mod_table_here (\%@) {
print Dumper(@_);
}
use_ok('TableMod', 'mod_table');
can_ok(__PACKAGE__, 'mod_table');
is(prototype(\&mod_table_here), '\\%@'
, q/prototype(\&mod_table_here) = '\%@'/
);
is(prototype(\&mod_table), prototype(\&mod_table_here)
, 'prototypes ARE the SAME!'
);
my %table = qw<One 1>;
mod_table_here %table => (1, 2, 3, 4);
#mod_table %table => (1, 2, 3, 4);
mod_table(%table, 1, 2, 3, 4);
Tout ce que je dois faire est uncomment suivant la dernière ligne et je reçois:
Useless use of modulus (%) in void context at - line 17.
Useless use of a constant in void context at - line 17.
Useless use of a constant in void context at - line 17.
Useless use of a constant in void context at - line 17.
Bareword "mod_table" not allowed while "strict subs" in use at - line 17.
Il ne se plaint pas du sous-marin local, mais il perd son esprit par rapport à l'importé. En plus de cela, malgré les tests me disant que j'ai importé 'mod_table', strict est maintenant confus que c'est un mot à mot!
Non seulement cela, mais malgré les essais qui me disent que les prototypes sont les mêmes, je ne peux pas passe %table
comme hashref au sous importé. Pas même si j'utilise la syntaxe conventionnelle, montrée dans la dernière ligne.
Ce que je reçois est:
1..4
ok 1 - use TableMod;
ok 2 - main->can('mod_table')
ok 3 - prototype(\&mod_table_here) = '\%@'
ok 4 - prototypes ARE the SAME!
$VAR1 = {
'One' => '1'
};
$VAR2 = 1;
$VAR3 = 2;
$VAR4 = 3;
$VAR5 = 4;
$VAR1 = 'One';
$VAR2 = '1';
$VAR3 = 1;
$VAR4 = 2;
$VAR5 = 3;
$VAR6 = 4;
Il y avait l'ajout du prototype '(_)', mais je ne sais pas pense que c'est lié. –