Perl furcsaság

Sziasztok!

Belefutottam egy hibába egy hosszabb Perl script írása során, az alábbi kódon is reprodukálható:


@tomb = ("alma", "korte", "barack");

$text = "Szeretem a %gyumolcs%-t";

foreach $gyumolcs (@tomb) {
        print $gyumolcs."\n";
        $text =~ s/%gyumolcs%/$gyumolcs/g;
        print $text."\n";
        print $gyumolcs."\n";
}

Ennek a kimenete a következő:


alma
Szeretem a alma-t
alma
korte
Szeretem a alma-t
korte
barack
Szeretem a alma-t
barack

Ugyanez a kimenet akkor is, ha a foreach loop-ot így írom:


foreach (@tomb) {
       print $_."\n";
       $text =~ s/%gyumolcs%/$_/g;
       print $text."\n";
       print $_."\n";
}

Mit csinálok rosszul?

Petya

Hozzászólások

Attól függ mit szeretnél csinálni. Inkább azt fejtsd ki és talán segít(?:(?:ek)|(?: valaki)).

Először is:

use strict;
use warnings;

Majd:

Ha jól látom, akkor szimplán lecseréled a $text változó értékét egyszer alma-ra, majd a következő lefutásnál a $text változóban nyilván már nincs %gyumolcs%, hanem csak 'alma'. Ezek után nem fogja neked a következő gyümölcs nevére cserélni sehogy sem.

perl -le 'print "Szeretem a".((/^a/)?"z":"")." $_"."t!"for(qw/almá körté baracko/)'

$text =~ s/%gyumolcs%/$gyumolcs/g;
print $text."\n";

=>

$_ = $text;
s/%gyumolcs%/$gyumolcs/g;
print $_."\n";

Köszönöm, és bocs a hülye topicért, ez az eredménye, ha az ember hajnalban, fáradtam próbál kódolni...

Reggel mikor felkeltem, eszembe is jutott, hogy marha voltam, mivel az első replace esetén már kicserélni a változót, értelemszerűen utána már nem lesz mit cserélni...

Megyek és megpörgetem a lamerszámlálót. :)

Amúgy PHP-ban ugyanezt korábban már megírtam, az a feladat, hogy egy szövegben több ilyen %akarmi% változó van, és mindet cserélni kell megadott szövegre, mint egy körlevélben.

Ott nagyon jól jött, hogy a preg_replace()-nek meg lehet adni két tömböt, és egy függvényhívással megcsinálja a cserét, így:

http://molnarp.pastebin.com/m110ab065

Perl-ben ilyen nincs, vagy csak én nem találtam meg?

szerk: ja és azt sem értem, hogy a fenti pastebin-es cuccot miért fogta meg a HUP-on a mod_security?

Petya