Syntaxe: Variable pointant sur un tableau

Le
ghe-162i
Bonjour,

Comment faire pointer la variable $nom sur la 5ième position d'un
tableau
@T, celui-ci me sert à lire les enregistrements d'un fichier.

si $T[5] == "Dupont" alors $nom="Dupont"
si $T[5] == "martin" alors $nom="martin"

Merci pour votre contribution.
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Thomas vO
Le #11169251
À (at) Wed, 2 Jul 2008 02:13:54 -0700 (PDT),
nous disait (told us):
Comment faire pointer la variable $nom sur la 5ième position d'un
tableau
@T, celui-ci me sert à lire les enregistrements d'un fichier.

si $T[5] == "Dupont" alors $nom="Dupont"
si $T[5] == "martin" alors $nom="martin"

Merci pour votre contribution.



je suis pas sûr de comprendre...

$nom = $T[4] #(la cinquième position...)

ne fonctionne pas ?

--
Thomas vO -
ghe-162i
Le #11169371
On 2 juil, 11:11, Thomas vO
À (at) Wed, 2 Jul 2008 02:13:54 -0700 (PDT),
nous disait (told us):

> Comment faire pointer la variable $nom sur la 5ième position d'un
> tableau
> @T, celui-ci me sert à lire les enregistrements d'un fichier.

> si $T[5] == "Dupont" alors $nom="Dupont"
> si $T[5] == "martin" alors $nom="martin"

> Merci pour votre contribution.

je suis pas sûr de comprendre...

$nom = $T[4] #(la cinquième position...)

ne fonctionne pas ?

--
Thomas vO -


Je cherche à affecter une référence (pointeur) et pas une valeur.

$nom= adresse T[4]; comment l'écrire ?
while (<>) {
@T = split(/ /);
printf("nom:%sn",$nom);
}
Thomas vO
Le #11169581
À (at) Wed, 2 Jul 2008 02:28:34 -0700 (PDT),
nous disait (told us):
Je cherche à affecter une référence (pointeur) et pas une valeur.

$nom= adresse T[4]; comment l'écrire ?



d'accord... dans ce cas :
$nom = $T[4];

--
Thomas vO -
Jogo
Le #11171411
Sur fr.comp.lang.perl, Thomas vO disait :

> Je cherche à affecter une référence (pointeur) et pas une valeur.
>
> $nom= adresse T[4]; comment l'écrire ?

d'accord... dans ce cas :
$nom = $T[4];



Non, ça ne marche pas. Perl n'est pas du C !

my @t = (1,2,3);
my $p = $t[1];
print "$$pn";
@t = qw(a b c);
print "$$pn";

Ça affiche :
2
2

Et non :
2
b

Le problème est que lorsqu'on modifie @t, perl crée un nouveau
tableau, et $p pointe toujours sur l'ancien.

--
Nous connaissons assez le capitalisme pour savoir qu'il n'y a pas de
séparation entre le contrôle et la propriété.
- Wall Street Journal - A New Owner (01/08/07) -
Thomas vO
Le #11171521
À (at) Wed, 2 Jul 2008 14:44:12 +0200,
Jogo
my @t = (1,2,3);
my $p = $t[1];
print "$$pn";
@t = qw(a b c);
print "$$pn";

Ça affiche :
2
2

Et non :
2
b

Le problème est que lorsqu'on modifie @t, perl crée un nouveau
tableau, et $p pointe toujours sur l'ancien.



au temps pour moi, j'avais essayé comme ça :

@T = (1, 2, 3, 4);
$nom = $T[0];
print "${$nom}, $T[0]n";
$T[0] = 0;
print "${$nom}, $T[0]n";

du coup, je sais pas...

--
Thomas vO -
Patrice Karatchentzeff
Le #11172371
Jogo
Sur fr.comp.lang.perl, Thomas vO disait :

> > Je cherche à affecter une référence (pointeur) et pas une valeur.
> >
> > $nom= adresse T[4]; comment l'écrire ?
>
> d'accord... dans ce cas :
> $nom = $T[4];

Non, ça ne marche pas. Perl n'est pas du C !

my @t = (1,2,3);
my $p = $t[1];
print "$$pn";
@t = qw(a b c);
print "$$pn";

Ça affiche :
2
2

Et non :
2
b

Le problème est que lorsqu'on modifie @t, perl crée un nouveau
tableau, et $p pointe toujours sur l'ancien.



oui, je ne vois pas bien comment tu peux t'y prendre autrement... à
chaque liste, tu as un pointeur de liste... tu changes de listes, tu
change de pointeur... Je ne comprends pas bien ce que tu veux faire...

% perl -e '@list=(1,2,3) ; print $list[1], "n"'
SCALAR(0x604440)

PK

--
      |      _,,,---,,_       Patrice KARATCHENTZEFF
ZZZzz /,`.-'`'    -.  ;-;;,_   mailto:
     |,4-  ) )-,_. , (  `'-'  http://p.karatchentzeff.free.fr
    '---''(_/--'  `-'_)       
jl_morel
Le #11173151
Dans l'article dit...

Sur fr.comp.lang.perl, Thomas vO disait :

> Je cherche à affecter une référence (pointeur) et pas une valeur.
>
> $nom= adresse T[4]; comment l'écrire ?

d'accord... dans ce cas :
$nom = $T[4];



Non, ça ne marche pas. Perl n'est pas du C !

my @t = (1,2,3);
my $p = $t[1];
print "$$pn";
@t = qw(a b c);
print "$$pn";

Ça affiche :
2
2

Et non :
2
b

Le problème est que lorsqu'on modifie @t, perl crée un nouveau
tableau, et $p pointe toujours sur l'ancien.




Avec $p = $t[1]; $p contient une référence vers le "contenu" de l'élément de
rang 1 de @t; vous n'avez aucune référence au tableau lui-même.

Il faudrait garder la référence du tableau $p = @t et ensuite afficher
l'élément de rang 1 : print $p->[1]; mais je suppose que c'est ce que vous
voulez éviter car il serait plus simple d'écrire print $t[1]; !!

Ce que vous pouvez faire c'est un tie entre un scalaire et un élément d'un
tableau. Le petit script suivant définit une classe "ArrayElem" qui permet
cela. En faisant par exemple :
tie $p, "ArrayElem", @t, 1;
la variable $p est un alias de $t[1].

Je ne sais pas à quoi ça peut servir mais c'était rigolo à écrire ;-)

#!/usr/bin/perl
use strict;
use warnings;

package ArrayElem;

sub TIESCALAR {
my $class = shift;
bless { array => shift, rang => shift }, $class;
}

sub FETCH {
my $self = shift;
return $self->{array}->[ $self->{rang} ];
}

sub STORE {
my $self = shift;
$self->{array}->[ $self->{rang} ] = shift;
}

package main;

my @t = ( 1, 2, 3 );

tie my $p, "ArrayElem", @t, 1; # $p est lié à $t[1]

print "$pn";

@t = qw(a b c); # on change @t

print "$pn";

$p = 'glop'; # on modifie $t[1]

print join ", ", @t;

__END__

--
J-L.M.
http://www.bribes.org/perl
Publicité
Poster une réponse
Anonyme