/ 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
Lille problem med referencer.
Fra : Thorbjoern Ravn Ande~


Dato : 28-08-01 18:37


Jeg sidder og laver noget Perlkode der behandler data fra XML::Simple.

I den sammenhæng har jeg nu en situation hvor jeg har en variabel
$entry som blandt andet indeholder (fra Data::Dumper):

$VAR1 = {
'filename' => [
'/home/zaphod/public_html/YGDRASIL/amkiosk.html'
],
}

Den vil jeg gerne have fisket ud, og med lidt fiflen er jeg nået til
at følgende to linier gør det:

    $filename = $entry->{'filename'};
    $filename = $$filename[0];

(først følges => og herefter åbnes [..]).

Det jeg gerne vil vide er syntaksen for at koge dem sammen i én. Jeg
har prøvet et sammensurium af paranteser, $ og @, men fejl får jeg.

Er der nogen der kan syntaksen i hovedet?
--
Thorbjoern Ravn Andersen "...plus...Tubular Bells!"
http://bigfoot.com/~thunderbear

 
 
Peppe (28-08-2001)
Kommentar
Fra : Peppe


Dato : 28-08-01 13:11

Således berettede Thorbjoern Ravn Andersen <ravn@adams.astervej16.dk>

>     $filename = $entry->{'filename'};
>     $filename = $$filename[0];

> Det jeg gerne vil vide er syntaksen for at koge dem sammen i én. Jeg
> har prøvet et sammensurium af paranteser, $ og @, men fejl får jeg.

Skud fra hoften:

$filename = $entry->{'filename'}[0];

Peppe
--
"Before you criticize someone, walk
Preben "Peppe" Guldberg __/-\__ a mile in his shoes. That way, if
c928400@student.dtu.dk (o o) he gets angry, he'll be a mile away
----------------------oOOo (_) oOOo-- - and barefoot." --Sarah Jackson

Lars Balker Rasmusse~ (28-08-2001)
Kommentar
Fra : Lars Balker Rasmusse~


Dato : 28-08-01 15:07

c928400@student.dtu.dk (Peppe) writes:
> Skud fra hoften:
>
> $filename = $entry->{'filename'}[0];

Skud fra hoften er kun anvendelige når de virker. Test.
--
Lars Balker Rasmussen "Special is bad."

Nezar Nielsen (28-08-2001)
Kommentar
Fra : Nezar Nielsen


Dato : 28-08-01 15:51

"Lars Balker Rasmussen" <lars@balker.org> skrev i en meddelelse
news:0fr8twe0sv.fsf@humulus.daimi.au.dk...
> c928400@student.dtu.dk (Peppe) writes:
> > Skud fra hoften:
> >
> > $filename = $entry->{'filename'}[0];
>
> Skud fra hoften er kun anvendelige når de virker. Test.

Men det gør det jo også:

[/cygdrive/g 14:44:11]$ perl
$j={
filename=>['/home/zaphod/public_html/YGDRASIL/amkiosk.html']
};
print $j->{filename}[0];

^D

/home/zaphod/public_html/YGDRASIL/amkiosk.html

:)

--
Mvh. Nezar Nielsen
http://fez.dk/




Peppe (28-08-2001)
Kommentar
Fra : Peppe


Dato : 28-08-01 16:05

Således berettede Lars Balker Rasmussen <lars@balker.org>
> c928400@student.dtu.dk (Peppe) writes:
> > Skud fra hoften:

> > $filename = $entry->{'filename'}[0];

> Skud fra hoften er kun anvendelige når de virker. Test.

Snappede eksemplet og det så fint ud ved en hurtig test:

#!/usr/bin/perl -w

$entry = { 'filename' => [ '/path/to/file' ] };

$f1 = $entry->{'filename'};
$f1 = $$f1[0];
print "$f1\n";

$f2 = $entry->{'filename'}[0];
print "$f2\n";

# Tilføjet sidenhen
$f3 = $entry->{'filename'}->[0];
print "$f3\n";

Hvor går det galt for mig?

Peppe
--
"Before you criticize someone, walk
Preben "Peppe" Guldberg __/-\__ a mile in his shoes. That way, if
c928400@student.dtu.dk (o o) he gets angry, he'll be a mile away
----------------------oOOo (_) oOOo-- - and barefoot." --Sarah Jackson

Lars Balker Rasmusse~ (28-08-2001)
Kommentar
Fra : Lars Balker Rasmusse~


Dato : 28-08-01 16:33

c928400@student.dtu.dk (Peppe) writes:
> Således berettede Lars Balker Rasmussen <lars@balker.org>
> > c928400@student.dtu.dk (Peppe) writes:
> > > Skud fra hoften:
>
> > > $filename = $entry->{'filename'}[0];
>
> > Skud fra hoften er kun anvendelige når de virker. Test.
>
> Snappede eksemplet og det så fint ud ved en hurtig test:

Sorry, jeg havde lavet en typo, da jeg testede din kode

Selvom man skyder fra hoften kan man jo godt ramme sin egen fod.
--
Lars Balker Rasmussen "Special is bad."

Thorbjoern Ravn Ande~ (28-08-2001)
Kommentar
Fra : Thorbjoern Ravn Ande~


Dato : 28-08-01 22:51

Lars Balker Rasmussen <lars@balker.org> writes:

> c928400@student.dtu.dk (Peppe) writes:
> > Således berettede Lars Balker Rasmussen <lars@balker.org>
> > > c928400@student.dtu.dk (Peppe) writes:
> > > > Skud fra hoften:
> >
> > > > $filename = $entry->{'filename'}[0];
> >
> > > Skud fra hoften er kun anvendelige når de virker. Test.
> >
> > Snappede eksemplet og det så fint ud ved en hurtig test:
>
> Sorry, jeg havde lavet en typo, da jeg testede din kode
>
> Selvom man skyder fra hoften kan man jo godt ramme sin egen fod.

Jeg mener ellers bestemt at jeg havde forsoegt den variant. Skummelt.

Laves der en usynlig dereferering i ovenstaaende?

--
Thorbjoern Ravn Andersen "...plus...Tubular Bells!"
http://bigfoot.com/~thunderbear

Nezar Nielsen (28-08-2001)
Kommentar
Fra : Nezar Nielsen


Dato : 28-08-01 18:42

"Thorbjoern Ravn Andersen" <ravn@adams.astervej16.dk> wrote in message
news:m2n14jg8gf.fsf@adams.astervej16.dk...
> > >
> > > > > $filename = $entry->{'filename'}[0];
>
> Laves der en usynlig dereferering i ovenstaaende?

fra perlreftut:

----klippe-klip----
Arrow Rule
In between two subscripts, the arrow is optional.

Instead of $a[1]->[2], we can write $a[1][2]; it means the same thing.
Instead of $a[0]->[1], we can write $a[0][1]; it means the same thing.

Now it really looks like two-dimensional arrays!

----klippe-klip-slut----

--

Mvh. Nezar Nielsen

http://fez.dk/






Lars Balker Rasmusse~ (28-08-2001)
Kommentar
Fra : Lars Balker Rasmusse~


Dato : 28-08-01 15:06

Thorbjoern Ravn Andersen <ravn@adams.astervej16.dk> writes:
> $VAR1 = {
> 'filename' => [
> '/home/zaphod/public_html/YGDRASIL/amkiosk.html'
> ],
> }
>
> Den vil jeg gerne have fisket ud, og med lidt fiflen er jeg nået til
> at følgende to linier gør det:
>
>     $filename = $entry->{'filename'};
>     $filename = $$filename[0];
>
> (først følges => og herefter åbnes [..]).
>
> Det jeg gerne vil vide er syntaksen for at koge dem sammen i én. Jeg
> har prøvet et sammensurium af paranteser, $ og @, men fejl får jeg.
>
> Er der nogen der kan syntaksen i hovedet?

Naturligvis, kære formand. Du var på rette vej:

$entry er en reference til en hash, hvorfor du skal bruge $ref->{}.
Det giver en reference til en list, hvorfor du skal bruge $ref->[].

Ergo:
$filename = $entry->{filename}->[0];
--
Lars Balker Rasmussen "Special is bad."

Thorbjoern Ravn Ande~ (28-08-2001)
Kommentar
Fra : Thorbjoern Ravn Ande~


Dato : 28-08-01 21:27

Lars Balker Rasmussen <lars@balker.org> writes:

> $entry er en reference til en hash, hvorfor du skal bruge $ref->{}.
> Det giver en reference til en list, hvorfor du skal bruge $ref->[].
>
> Ergo:
> $filename = $entry->{filename}->[0];

Løvely! Wørker.

Takker ærbødigst

Har imellemtiden fundet ud af at bruge HTML::TreeBuilder. Den er en
anelse for viderekomne.
--
Thorbjoern Ravn Andersen "...plus...Tubular Bells!"
http://bigfoot.com/~thunderbear

Nezar Nielsen (28-08-2001)
Kommentar
Fra : Nezar Nielsen


Dato : 28-08-01 15:27

"Thorbjoern Ravn Andersen" <ravn@adams.astervej16.dk> skrev i en meddelelse
news:m2lmk413z1.fsf@adams.astervej16.dk...
>
> $VAR1 = {
> 'filename' => [
> '/home/zaphod/public_html/YGDRASIL/amkiosk.html'
> ],
> }
>
> Den vil jeg gerne have fisket ud, og med lidt fiflen er jeg nået til
> at følgende to linier gør det:
>
> $filename = $entry->{'filename'};
> $filename = $$filename[0];
>
> (først følges => og herefter åbnes [..]).
>
> Det jeg gerne vil vide er syntaksen for at koge dem sammen i én. Jeg
> har prøvet et sammensurium af paranteser, $ og @, men fejl får jeg.
>
> Er der nogen der kan syntaksen i hovedet?

Hejsa,

Dereferer og pak ud med pile, det er IMO mest overskueligt:

hash-nøglen 'filename' fra hashreffet "$entry": $entry->{filename}
første element af arrayreffen "$entry->{filename}": $entry->{filename}->[0]

--
Mvh. Nezar Nielsen
http://fez.dk/





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

Månedens bedste
Årets bedste
Sidste års bedste