CssonMedlem sedan feb. 2000438 inlägg Har problem med ett script. Jag läser in en fil med html-kod (all text är på första raden) till @headfile ($head = $headfile[0]). I filen har jag speciella taggar (ser ut så här: <%tagg%> ) som jag vill byta ut till värdet på motsvarande variabel (ex $tagg).
Om jag gör:
$head =~ s/<%tagg%>/$tagg/g;
skrivs "$tagg" ut och
if($head =~ /<%tagg%>/) {
print $tagg;
$head =~ s/<%tagg%>//g;
}
skriver ut värdet, men före resten av $head.
Hur kan jag ersätta <%tagg%> med $tagg-värdet på rätt plats?
/Csson
FlashXMedlem sedan nov. 19991 033 inlägg Du kanske kan testa lite med varianter på denna lopen.
for (@head) {
s/<%tagg%>/$tagg/g;
}
RobbanMedlem sedan dec. 19992 555 inlägg Csson:
Förstår inte frågan riktigt, ärligt talat. Är du ute efter något generellt regexp som byter ut <%whatever%> mot innehållet i variabeln $whatever (oberoende av vad "whatever" är för något)? Är i.a.f. så jag tolkar din fråga (men FlashX har uppenbarligen tolkat det annorlunda, så du kanske kan förklara lite mer vad du är ute efter).
Om jag har tolkat dig rätt, prova med:
$head =~ s/<%(.*?)%>/${$1}/eg;
Om du använder use strict; i ditt script kommer Perl att klaga över denna rad - använd i så fall no strict "ref"; innan substitutionen.
------------------
Robban < robban@lipogram.com >
[Redigerat av Robban den 09 feb 2000]
CssonMedlem sedan feb. 2000438 inlägg Tack för hjälpen,
Jag försökte en variant på den,
for($a = 0; $a < @head; $a++) {
$_ = $head[$a];
if(/(.*?)<%realcount%>(.*?)/) {
print $1;
print $realcount;
print $2;
}
else {
print "$_";
}
}
som av någon anledning bara skriver ut $1 och $realcount men inte $2.
Tills vidare har jag löst det genom att kräva att <%taggarna%> är på egna rader:
for($a = 0; $a < @head; $a++) {
$_ = $head[$a];
if(/<%realcount%>/) {
print $realcount;
}
else {
print "$_";
}
}
/Csson
[Redigerat av Csson den 09 feb 2000]
RobbanMedlem sedan dec. 19992 555 inlägg Varför inte kort och gott:
foreach (@head) {
s/<%realcount%>/$realcount/g;
print;
}
------------------
Robban < robban@lipogram.com >