/ Forside / Teknologi / Udvikling / Perl / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Perl
#NavnPoint
bjarneA 141
poul_from 50
soccer 30
Nicknack 14
Tmpj 0
Længden af et indirekte array?
Fra : Morten Guldager


Dato : 12-03-05 10:43

Hejsa,

I kender ganske givet alle den her

my @liste = ("Morten", "Guldager");
my $antal = $#liste + 1;
warn "Antal navne: $antal\n";

Hvilket fortæller at der er 2 navne i listen.

Nu ligger landet beklageligvis således at jeg ikke har
adgang til @liste, men kun har en reference til samme:

Altså noget i stil med:

my @liste = ("Morten", "Guldager");
my $liste_ref = \@liste;
my $antal = $#{@$liste_ref} + 1; # store problemer her!
warn "Antal navne: $antal\n";

Som I sikkert let kan se går det helt galt i linje 3.

Nogen forslag til en bedre (brugbar) syntax her?


/Morten

 
 
Stig H. Jacobsen (12-03-2005)
Kommentar
Fra : Stig H. Jacobsen


Dato : 12-03-05 12:44

On Sat, 12 Mar 2005 09:43:15 GMT, Morten Guldager wrote:

> Som I sikkert let kan se går det helt galt i linje 3.

Næh, koden virker fint her med perl v5.8.5 i386-linux-thread-multi.

> my $antal = $#{@$liste_ref} + 1; # store problemer her!
> Nogen forslag til en bedre (brugbar) syntax her?

Du kan prøve at droppe '@', siden den er unødvendig.

--
Stig

Christian Laursen (12-03-2005)
Kommentar
Fra : Christian Laursen


Dato : 12-03-05 12:55

Morten Guldager <Morten.Guldager@gmail.com> writes:

> Hejsa,
>
> I kender ganske givet alle den her
>
> my @liste = ("Morten", "Guldager");
> my $antal = $#liste + 1;

Jeg plejer at bruge

my $antal = @liste;

istedet. Et array evalueret i scalar kontekst giver nemlig antal elementer.

> warn "Antal navne: $antal\n";
>
> Hvilket fortæller at der er 2 navne i listen.
>
> Nu ligger landet beklageligvis således at jeg ikke har
> adgang til @liste, men kun har en reference til samme:
>
> Altså noget i stil med:
>
> my @liste = ("Morten", "Guldager");
> my $liste_ref = \@liste;
> my $antal = $#{@$liste_ref} + 1; # store problemer her!
> warn "Antal navne: $antal\n";

my $antal = @$liste_ref;

--
Christian Laursen

Adam Sjøgren (12-03-2005)
Kommentar
Fra : Adam Sjøgren


Dato : 12-03-05 13:21

On 12 Mar 2005 12:54:57 +0100, Christian wrote:

> Jeg plejer at bruge

> my $antal = @liste;

> istedet. Et array evalueret i scalar kontekst giver nemlig antal
> elementer.

Og hvis man vil være sikker på ikke at få problemer når man ændrer
konteksten, uden at tænke over det det, kan scalar(@liste) altid
bruges.


Mvh.

Adam

--
"Grittings. Ma nam is Kahlfin." Adam Sjøgren
asjo@koldfront.dk

Peter J. Acklam (13-03-2005)
Kommentar
Fra : Peter J. Acklam


Dato : 13-03-05 08:55

Morten Guldager <Morten.Guldager@gmail.com> wrote:

> [...] Altså noget i stil med:
>
> my @liste = ("Morten", "Guldager");
> my $liste_ref = \@liste;
> my $antal = $#{@$liste_ref} + 1; # store problemer her!

my $antal = $#$liste_ref + 1;

eller bedre

my $antal = @$liste;

Peter

--
#!/local/bin/perl5 -wp -*- mode: cperl; coding: iso-8859-1; -*-
# matlab comment stripper (strips comments from Matlab m-files)
s/^((?:(?:[])}\w.]'+|[^'%])+|'[^'\n]*(?:''[^'\n]*)*')*).*/$1/x;

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408924
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste