Jak escapovat $1 v perlu?
Pavel Lisý
pali na tmapy.cz
Pondělí Červenec 16 15:56:47 CEST 2007
Erich Vinclav píše v Po 16. 07. 2007 v 13:39 +0100:
> On Mon, 16 Jul 2007 14:33:27 +0200, Pavel Lisý wrote
> > Dobrý den
> >
> > potřeboval bych poradit, jak napsat něco v perlu. Nemohu na to nějak
> > přijít a určitě je to jednoduché:
>
> >
> > &change_file($file,"^\([^#]*-autorespond\)", "# \$1" );
> ^^^^^^^
>
> "# ".$1
Toto nefunguje, zkusím více vysvětlit o co mi jde.
Uvedu raději znovu celou část programu:
--------------------------
sub change_file
{
my($file, $pattern, $replace) = @_;
print "file: ".$file ."\n";
print "pattern: ".$pattern ."\n";
print "replace: ".$replace ."\n";
open(FILEOUT, ">$file");
foreach $line (@lines) {
$line =~ s/$pattern/$replace/g;
print FILEOUT $line ;
}
close(FILEOUT);
}
&change_file($file,"^\([^#]*-autorespond\)", "# ".$1 );
--------------------------
Při spuštění to vypíše toto:
file: testovani.txt
pattern: ^([^#]*-autorespond)
replace: #
...
#
a já bych potřeboval aby poslední řádek byl
# neco-autorespond
Původní varianta
&change_file($file,"^\([^#]*-autorespond\)", "# $1");
dělá to samé.
Problém podle mě spočívá v tom, že perl interpretuje $1 již na řádku
&change_file($file,"^\([^#]*-autorespond\)", "# ".$1 );
a na řádek
$line =~ s/$pattern/$replace/g;
se v $replace dostane pouze "# "
pokud do sub change_file ()
napíšu natvrdo
$line =~ s/$pattern/# $1/g
tak to zafunguje správně, ale já potřebuji ty $pattern a $replace
zadávat dynamicky (parametrem)
Ještě nějaké nápady?
Pavel
Další informace o konferenci Linux