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);