[perl] spatie + samenvoegen twee variablen

Pagina: 1
Acties:
  • 60 views sinds 30-01-2008

  • Justin_Time
  • Registratie: Juni 2001
  • Laatst online: 17-07-2025
Dag mensen,

Ik heb hier een klein probleempje waar ik maar niet uit kan komen. Ik ben helemaal niet thuis in perl en heb menig site afgezocht om zoiets simpels als dit te kunnen oplossen maar het wel maar niet lukken.

Ik heb een webprogramma waarin het volgende stukje code staat.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<TABLE BORDER=0 WIDTH=100%>
EOF
                my $odd;
                for my $item (@{$directories{$dir}{target}}) {
                        my $itemname = $item;
                        $itemname = $targets{$item}{title}                    
                                if defined $targets{$item}{title};
                        print "    <TR>\n" unless $odd;
                        print <<EOF;
   <TD><A HREF="$item.html">$itemname<BR>
        [img]"$item-day.$imagetype"[/img]
        </A><BR CLEAR=ALL>
   </TD>
EOF


Nu is het probleem bij de uitvoer van $itemname worden de woorden aan elkaar geplakt.

Hoe ik het zie komt dit door:
code:
1
$itemname = $targets{$item}{title}


Wat ik begrepen heb van mijn search tocht maakt hij de variablen $itemname door te zeggen dat dit de variablen $targets is die bestaat uit $item + title. (volgens mij leest hij title uit een config).

Nu is het probleem hoe krijg ik hier een spatie tussen? (item title). Het enige wat ik kon vinden zijn de spaties door middel van comma's in de print functie maar hier wordt $itemname geprint dus dan ben ik al te laat.

Heeft iemand raad?

Elke dag dronken is ook een geregeld leven.


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 21:24

NMe

Quia Ego Sic Dico.

Google weet raad:
[google=string concatenation in perl]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • Justin_Time
  • Registratie: Juni 2001
  • Laatst online: 17-07-2025
Ja daar heb ik ook naar gezocht en dan krijg ik voorbeelden als $var = ' een string' . ' een tweede string'.

Ik snap alleen niet hoe ik dat kwijt moet in die voor mij? rare constructie als:
code:
1
$itemname = $targets{$item}{title}

[ Voor 18% gewijzigd door Justin_Time op 01-12-2004 02:30 ]

Elke dag dronken is ook een geregeld leven.


  • Morrar
  • Registratie: Juni 2002
  • Laatst online: 15-05 19:40
Dat is wel *erg* rangzige code die je daar post. Ik heb het gevoel dat degene die dat gebakken heeft weinig van Perl snapt... Ff een paar punten:

- de eerste 2 regels had je uit het voorbeeld weg kunnen laten, die doen er niet toe
- $odd wordt nergens een waarde aan toegekend
- $itemname wordt eerst op $item geinitialiseerd en daarna op $target{$item}{title}

En zo zijn er nog wel meer puntjes maar op naar je probleem. Ik denk dat het goed is als je even op Perl.com wat zou lezen over hashes / objecten. Dat zou e.e.a. denk ik een stuk duidelijker maken.

code:
1
$itemname = $targets{$item}{title}

Betekent dat $itemname de waarde van "title" van het object $targets{$item} meekrijgt. In @targets (is een array oftewel verzameling) of %targets (als het een zuivere hash betreft) zitten een aantel items. $targets{$item} betekent dat je het object dat aangeduid wordt door $item daaruit "selecteert". Vervolgens zeg je met $targets{$item}{title} dat je de eigenschap {title} van dat object wilt hebben. $itemname zou dus een string moeten zijn met de titel van het object, oftewel 1 string.

Dus ik weet niet waar je een spatie voor wilt hebben? Als je een samenvoeging van $item en de titel wilt hebben doe je dat zo (met spatie ertussen):
code:
1
$str = $item . ' ' .  $targets{$item}{title};


HTH

  • Justin_Time
  • Registratie: Juni 2001
  • Laatst online: 17-07-2025
Hoi,

Bedankt voor je uitleg dit gaat gewoon over een stukje mrtg. Hier heb ik zelf niets aan gedaan :)

Ik wist niet dat je in perl zo een object aangeeft, dat verduidelijkt een boel. Dus als ik het goed begrijp is title hetgeen waar ik naar opzoek ben.

Dit wordt uit een configuratie bestand gehaald en hier heb ik al geporbeerd een spatie voor te zetten maar dat gaat niet. Ik vermoed dan ook dat hij door 1 of andere parser wordt gehaald.

Maar ik ga even proberen of ik dit variabelen gewoon weer kan vullen met een spatie + zichzelf. even prutsen maar bedankt :)

Elke dag dronken is ook een geregeld leven.


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 20:44

Creepy

Tactical Espionage Splatterer

Neem de volgende keer ook wat perl tutorials door :) De link die NME post stikt van de informatie over jou probleem. Ook Morrar geeft aan dat de info die je blijkbaar mist vrij simpel zelf kan opzoeken en dat het een vrij basic perl iets is.

Lees ook Hoe ga ik te werk als ik een vraag heb? eens door :)

Vandaar dat dit topic nu dicht zit.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney

Pagina: 1

Dit topic is gesloten.