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";
}
}
}