《Perl语言入门》第四版习题(9)

1. [7]写一个模式,它能匹配$what 当前的内容的3 份连续拷贝。也就是说,如果$what 为fred,则此模式能匹配fredfredfred。
如果$what 为fred|barney,则此模式能匹配fredfredbarney, barneyfredfred, barneybarneybarney,或者其它的变种。(提示:
你应当在程序的顶端设置$what 的值,如my $what = ‘fred|barney’;)
2. [12]写一个程序,它可以得到当前文本文件的一个拷贝。在拷贝的文件中,字符串Fred(大小写无关)将被Larry 替换掉。
(因此,“Manfred Mann”将变成“ManLarry Mann”.)输入的文件名已经在命令行中指定(不需要询问用户),输出的
文件名是对应的输入文件名后面加上.out。
3. [8]修改上面程序,使之将Fred 由Wilma 替换,Wilma 由Fred 替换。如果输入的为fred&wilma,则输出为Wilma$Fred。
4. [10] 额外练习:写一个程序在你所有的练习的答案前加上下面这样一行:
a) ## Copyright (C) 20XX by Yours Truly
将上面一行放在“shebang”行(Perl 程序的第一行,#!/usr/bin/perl(可能随Perl 安装的位置而有所不同,但是指第一行,
译者注))下面。你应当在“源文件”中修改,但请备份文件。假定你可以在命令行中同时输入程序和需要的修改的文
件名。
5. [15]额外练习:修改第四题程序,如果程序已经有copyright 这一行,则不进行修改。提示:由<>读入的文件名可以在
$ARGV 中找到。

 

1、

#!/usr/bin/perl -w
use strict;

my $what='fred|barney';
while(<>){
if(m/($what){3}/i){
        print $_;
        }
}

 

2、

#!/usr/bin/perl -w
use strict;

$^I=".out";

while(<>){
s/Fred/Larry/ig;
print;
}

 

3、

#!/usr/bin/perl -w
use strict;

$^I=".out";

while(<>){
unless  (s/Fred/Wilma/ig)
        {
                s/Wilma/Fred/i;
        }
print;
}

 

4、

#!/usr/bin/perl -w
use strict;

$^I=".out";

while(<>){
        print ;
        if(m#usr/bin#){
                print "##Copyright (C) 2009 by Yours Truly/n";
        }
}

 

5、

#!/usr/bin/perl -w
use strict;

my %a;
for (@ARGV){
        $a{$_}=1;
}
while(<>){
        if(/copy/i)
                {
                delete $a{$ARGV};
                }
}

if(%a){
        @ARGV=sort keys %a;
        $^I=".out";
        while (<>){
        print ;
        if(m#usr/bin#){
                print "##Copyright (C) 2009 by Yours Truly/n";
                }
        }
}

 

 

你可能感兴趣的:(《Perl语言入门》第四版习题(9))