Dobrý den, snažím se v Perlu napsat skript, který by prošel všechny XML soubory v zadaném adresáři, každý z nich otevřel a prohledal ho, zda obsahuje zadaný text (porovnávání pomocí regulárního výrazu) a následně tento vyhledaný text nahradil jiným. Zatím se mi podařilo vše, až na zapsání změněného text do příslušného souboru. Zkoušel jsem vyhledaný text nahradit pomocí substituce přímo v regulárním výrazu. Pro kontrolu jsem si nechal vypsat nalezený text i text nahrazený, ale žádná změna se v souborech neobjevila. Mohl bych vás poprosit o radu? Kód vypadá následovně:
my $adresar=<STDIN>;
my (@soubory, $jmeno, $cesta);
chomp ($adresar);
opendir(ADR,$adresar) # otevírá adresář (dle zadané cesty)
or die "Nelze otevrit $adresar!\n";
@soubory = readdir(ADR); # načítá obsah adresáře do pole @soubory
closedir(ADR);
# pro každý soubor v adresáři porovná jména s regexpem (pokud jméno začíná
# tečkou, tak přeskočí na další a vytvoří pomocí proměnných $jmeno a $adresar
# celou cestu k souboru v zadané složce
foreach $jmeno (@soubory) {
if ($jmeno =~ /^\./){
next;
}
$cesta=$adresar."\\".$jmeno;
print "$jmeno\t".$cesta."\n";
chomp ($cesta);
# otevře soubor umístěný v daném adresáři (cesta k němu je v proměnné $cesta)
open (FOXML,$cesta)
or die "Nemohu otevrit soubor $cesta\n";
# kontrolní výpis
print "Oteviram soubor............. $cesta\n\n";
# pokud najde ve vstupním souboru řádek odpovídající regexpu nahradí ho jiným
# regexpem a pro kontrololu ho vypíše do konzole
while ($radek=<FOXML>) {
if ($radek=~ s/\<kramerius:file\>(\D{2,3})(\d{2}\D{1})(\d{3})(\d{3})(\_\d{4}).jpg\<\/kramerius:file\>/\<kramerius:tiles-url\>http:\/\/imageserver.techlib.cz\/$1\/$2\/$3\/$4\/$1$2$3$4$5.jp2\<\/kramerius:tiles-url\>/g ) {
print "$radek\n\n";
}
}
}
# zavírání souboru
close (FOXML);