Perl替换字符串(newstring oldstring)

时间:2013-10-10 19:04:35

标签: perl

通过将旧字符串的每次出现更改为新字符串来实现处理输入文件的程序。 (用法是:chstr文件oldstring newstring,chstr是你的程序名,文件,oldstring和newstring是用户指定的参数。)

if( @ARGV < 2)
{    
print "usage: ReplaceString.pl filename OldString NewString\n";
print "   example: perl ReplaceString.pl intelliquest.txt ";
print "IntelliQuest Kantar > kantar.txt\n";
exit 0;
}
$OldString = $ARGV[1];
$NewString = $ARGV[2];
open(MYFILE,$ARGV[0]) || die "Cannot open file \"$ARGV[0]\"";
while($line = &lt;MYFILE&gt;)
{
$line =~ s/$OldString/$NewString/g;
print STDOUT $line;
}

我真的不确定这里有什么问题,我试着运行

jd@jd-laptop:~/Desktop$ perl HW1-2.pl text.txt if the

要替换if和我得到......

syntax error at HW1-2.pl line 11, near "&lt;"
syntax error at HW1-2.pl line 11, near "&gt"
syntax error at HW1-2.pl line 15, near "}"
Execution of HW1-2.pl aborted due to compilation errors.

我需要&amp; lt和&amp; gt?我是Perl的新手

提前致谢

2 个答案:

答案 0 :(得分:7)

无论你以此为基础的任何教程都是由一个无法检查他的工作的人写的。 &lt;&gt;分别应该是<>,但是在某个地方,它会被过度HTML编码。

具体来说,行

while($line = &lt;MYFILE&gt;)

应更改为:

while($line = <MYFILE>)

答案 1 :(得分:0)

jwodder有答案,但你似乎对此感到困惑:

这适用于我的Mac。如果您在Linux,Mac或Unix系统上运行它,则需要它 第一行我有#! /usr/bin/env perl。否则,您需要从命令行以perl ReplaceString.pl运行程序。

一台Windows,您必须确保.pl后缀映射到您的Perl解释器。

#! /usr/bin/env perl

if( @ARGV < 2) {    
    print "usage: ReplaceString.pl filename OldString NewString\n";
    print "   example: perl ReplaceString.pl intelliquest.txt ";
    print "IntelliQuest Kantar > kantar.txt\n";
    exit 0;
}
$OldString = $ARGV[1];
$NewString = $ARGV[2];

open(MYFILE,$ARGV[0]) || die "Cannot open file \"$ARGV[0]\"";

while( $line = <MYFILE> ) {
    chomp $line;
    $line =~ s/$OldString/$NewString/g;
    print "$line\n";
}

我把它带到你的课程并学习Perl。

我只是好奇你在哪里学习Perl。这是我希望在旧的Perl 3.x天中看到的语法。从那以后Perl已经取得了相当大的进步,我认为你的老师会用更新的语法风格来帮助你。