---
title: "Ersätta med variabelvärde..."
type: "forum-thread"
url: "https://www.webforum.nu/amne/perl-ruby/18951-ersätta-med-variabelvärde"
topic: "Perl & Ruby"
topic_url: "https://www.webforum.nu/amne/perl-ruby"
author: "Csson"
published: "2000-02-09T00:35:00.000Z"
updated: "2000-02-09T12:25:00.000Z"
replies: 4
views: 492
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/perl-ruby/18951-ersätta-med-variabelvärde"
---

# Ersätta med variabelvärde...

## #1 — Csson, 2000-02-09T00:35Z

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

Permalänk: https://www.webforum.nu/p/18951

## #2 — FlashX, 2000-02-09T01:53Z

Du kanske kan testa lite med varianter på denna lopen.

for (@head) {
s/\<%tagg%\>/$tagg/g;
}

Permalänk: https://www.webforum.nu/p/336697

## #3 — Robban, 2000-02-09T02:43Z

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.

Permalänk: https://www.webforum.nu/p/336698

## #4 — Csson, 2000-02-09T11:29Z

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\]

Permalänk: https://www.webforum.nu/p/336699

## #5 — Robban, 2000-02-09T12:25Z

Varför inte kort och gott:

```
foreach (@head) {
s/<%realcount%>/$realcount/g;
print;
}
```

Permalänk: https://www.webforum.nu/p/336700

---

Tråden på webben: https://www.webforum.nu/amne/perl-ruby/18951-ersätta-med-variabelvärde
