[PERL] Passage de plusieurs array en paramêtre à une fonction

Passage de plusieurs array en paramêtre à une fonction [PERL] - Perl - Programmation

Marsh Posté le 04-12-2003 à 23:02:36    

une simple variable c'est facile
 

Code :
  1. maFonction($var1);
  2. sub maFonction {
  3.    my $var = shift;
  4. }


 
plusieurs variable aussi
 

Code :
  1. maFonction($var1, $var2, $var3);
  2. sub maFonction {
  3.    my $var1 = shift;
  4.    my $var2 = shift;
  5.    my $var3 = shift;
  6. }


 
variables et 1 array c'est simple
 

Code :
  1. maFonction($var1, $var2, @array1);
  2. sub maFonction {
  3.    my $var1 = shift;
  4.    my $var2 = shift;
  5.    my @array = @_;
  6. }


 
mais pour 2 array?!? comment on fait
 

Code :
  1. maFonction(@array1, @array2);
  2. sub maFonction {
  3.    ???
  4. }


Message édité par burgergold le 04-12-2003 à 23:02:54

---------------
http://www.boincstats.com/signature/user_664861.gif
Reply

Marsh Posté le 04-12-2003 à 23:02:36   

Reply

Marsh Posté le 05-12-2003 à 02:34:21    

La seule solution est de les passer par référence :

#!/usr/bin/perl -w
 
use strict;
 
sub func(\@\@) {
        my ($a1, $a2) = @_;
        print "Array #1: (" . join(", ", @$a1) . " )\n";
        print "Array #2: (" . join(", ", @$a2) . " )\n";
}
 
my @a = (1, 2, 3);
my @b = (4, 5, 6);
 
func(@a, @b);


 
Mais évidemment, si tu modifies les tableaux dans ta fonction ça les modifies aussi dans la fonction appelante. Enfin c'est du passage par référence, quoi...


Message édité par matafan le 05-12-2003 à 02:39:06
Reply

Marsh Posté le 05-12-2003 à 02:36:30    

Et si tu n'aimes pas les prototypes (mais les prototypes c'est bien), ça revient à faire :

#!/usr/bin/perl -w
 
use strict;
 
sub func {
        my ($a1, $a2) = @_;
        print "Array #1: (" . join(", ", @$a1) . " )\n";
        print "Array #2: (" . join(", ", @$a2) . " )\n";
}
 
my @a = (1, 2, 3);
my @b = (4, 5, 6);
 
func(\@a, \@b);

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed