[perl] basic array vraagje maar kom er niet uit

Pagina: 1
Acties:

  • usr-local-dick
  • Registratie: September 2001
  • Niet online
Hoi

Ik wil in een aantal files een string replacen.
De filenames zitten in een array.
Dus dacht ik:

code:
1
2
3
4
5
6
7
#!/usr/bin/perl
@files = ('/tmp/test', '/tmp/test2', '/tmp/test3');

foreach $file (@files) {
        print "Changing $file...\n";
        perl -pi 's/foo/bar/g' $file;
}


Maar dan krijg ik:

Scalar found where operator expected at ./replace.pl line 6, near "'s/foo/bar/g' $file"
(Missing operator before $file?)


Ik doe echt mijn best om te begrijpen wat er mis gaat maar helaas :?

Verwijderd

Eerst de hele file openen en dan de replace uitvoeren
code:
1
2
3
4
5
6
7
open(FILE, $file) or die "Unable to open file $file\n";
while (<FILE>)
{
    $line=$_;
    $line=~s/foo/bar/g;
}           
close(FILE);

[ Voor 106% gewijzigd door Verwijderd op 22-09-2004 12:51 ]


  • JaWi
  • Registratie: Maart 2003
  • Laatst online: 14-01 21:58

JaWi

maak het maar stuk hoor...

Of in een keer:

code:
1
perl -i.bak -pe "s/foo/bar/g" <file1> <file2> <file3>


Krijg je nog mooie backups van je oude bestanden ook :-)

Statistics are like bikinis. What they reveal is suggestive, but what they hide is vital.


Verwijderd

Zoek eens naar "regular expressions". deze zijn daar uitermate geschikt voor!

  • usr-local-dick
  • Registratie: September 2001
  • Niet online
Verwijderd schreef op 22 september 2004 @ 12:46:
Eerst de hele file openen en dan de replace uitvoeren
code:
1
2
3
4
5
6
7
open(FILE, $file) or die "Unable to open file $file\n";
while (<FILE>)
{
    $line=$_;
    $line=~s/foo/bar/g;
}           
close(FILE);
Als ik die doe gebeurt er niks??
Moet er niet ergens gewrite worden?
Heb wederom 3 uur gezocht en 100 keer allerlei dingen geprobeerd maar nog steeds werkt het niet :(

Verwijderd

Bij mij lukt het volgende commando op de prompt:

perl -pi -e"s/name/naam/g" <file1> <file2> ....

(op HP-UX perl versie 5.6.1 en 5.005_02)

Om dit in een script te gooien lukt mij niet.
edit:

Door gebruikt te maken van
system("perl -pi -e's/iets/anders/g' <file>");
is het me wel gelukt.

[ Voor 30% gewijzigd door Verwijderd op 22-09-2004 16:35 ]


  • bRight
  • Registratie: Juli 2000
  • Laatst online: 27-11-2024

bRight

digitaal

ff bufferen:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
open(FILE, $file) or die "Unable to open file $file\n";
while (<FILE>)
{
    $line = $_;
    $line =~ s/foo/bar/g;
    $buffer .= $line;
}            
close(FILE);

unlink($file);

open(FILE, ">$file") or die "Unable to open file $file\n";
print FILE $buffer;
close(FILE);


edit:

vergeet niet die buffer te flushen als je dit in een loop met meerdere files gooit ;)

[ Voor 21% gewijzigd door bRight op 22-09-2004 18:27 ]

Pagina: 1