Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

shift versus @_

2 réponses
Avatar
Luc
Bonjour,

Je croyais qu'utiliser @_ et shift =E9tait =E9quivalent.

J'ai cr=E9er deux "sub". Un qui utilise @_ et l'autre utilise shift.

On attend une r=E9f=E9rence d'un scalaire.

sub_shift se comporte comme je m'y attendais. Elle incr=E9mente de 1 la
valeur point=E9e par la r=E9f=E9rence re=E7ue.

Cependant, avec sub_tab, j'obtiens
Can't use string ("1") as a SCALAR ref while "strict refs" in use at
test.pl

Quelqu'un m'expliquer ce qui se passe ?

#######################################################################
#!/usr/bin/perl -w

use strict;

sub sub_tab( $ ) {
my $var =3D @_;
print "avant tab : " . $$var . "\n";
$$var++;
print "apres tab : " . $$var . "\n";
}


sub sub_shift( $ ) {
my $var =3D shift;
print "avant shift : " . $$var . "\n";
($$var++);
print "apres shift : " . $$var . "\n";
}

my $variable;
my $ref_var =3D \$variable;

# Ok Pas de probl=E8me
$variable =3D8;
print $$ref_var , " " . $variable . "\n";
sub_shift( $ref_var );
print "hors de la proc" . $variable . "\n";


# Can't use string ("1") as a SCALAR ref while "strict refs" in use at
test.pl Pourquoi ???
$variable =3D8;
print $$ref_var , " " . $variable . "\n";
sub_tab( $ref_var );
print "hors de la proc" . $variable . "\n";

2 réponses

Avatar
Nicolas George
Luc wrote in message
:
my $var = @_;


Tu es en train de stocker un tableau dans un scalaire. La conséquence est
que le scalaire reçoit le nombre d'éléments du tableau.

my ($var) = @_;

Avatar
Luc
Oh là là

Je ne l'ai pas vu venir du tout celle-là!!

Merci beaucoup





On 3 oct, 15:33, Nicolas George <nicolas$ wrote:
Luc wrote in message

:

my $var = @_;


Tu es en train de stocker un tableau dans un scalaire. La conséquence e st
que le scalaire reçoit le nombre d'éléments du tableau.

my ($var) = @_;