1. 题目
2. 代码与输出
1
#
-----------------------------------------------------------#
2 # Source: Learning Perl, chapter9,exercise-1
3 # Date: 2012-01-19
4 # Author: xiaodongrush
5 #-----------------------------------------------------------#
6 use 5.010;
7 @array = qw {
8 fredfredfred
9 fredfredbarney
10 barneyfredfred
11 barneybarneybarney
12 fred|barney
13 };
14 @content = qw {
15 fred fred|barney
16 };
17 foreach $what( @content) {
18 say " \$what = $what ";
19 say " \@array = (@array) ";
20 foreach $text( @array) {
21 if( $text =~ m/(?: $what){ 3}/) {
22 say " <$`><$&><$'> ";
23 }
24 }
25 say " ---------------------------- ";
26 }
27 <STDIN>;
28 # -----------------------------------------------------------#
29 # 将某个字符串重复3次,注意这个字符串可能包含或|这样的字符,因此将其用括号
30 # 括起来就好了
31 #-----------------------------------------------------------#
2 # Source: Learning Perl, chapter9,exercise-1
3 # Date: 2012-01-19
4 # Author: xiaodongrush
5 #-----------------------------------------------------------#
6 use 5.010;
7 @array = qw {
8 fredfredfred
9 fredfredbarney
10 barneyfredfred
11 barneybarneybarney
12 fred|barney
13 };
14 @content = qw {
15 fred fred|barney
16 };
17 foreach $what( @content) {
18 say " \$what = $what ";
19 say " \@array = (@array) ";
20 foreach $text( @array) {
21 if( $text =~ m/(?: $what){ 3}/) {
22 say " <$`><$&><$'> ";
23 }
24 }
25 say " ---------------------------- ";
26 }
27 <STDIN>;
28 # -----------------------------------------------------------#
29 # 将某个字符串重复3次,注意这个字符串可能包含或|这样的字符,因此将其用括号
30 # 括起来就好了
31 #-----------------------------------------------------------#
1
#
-----------------------------------------------------------#
2 # Source: Learning Perl, chapter9,exercise-2
3 # Date: 2012-01-19
4 # Author: xiaodongrush
5 #-----------------------------------------------------------#
6 use 5.010;
7 $input_file = $ARGV[ 0];
8 $output_file = $ARGV[ 0] . " .out ";
9 unless(! open IN, " <$input_file ") {
10 say " Can't read <$input_file> ! ";
11 }
12 unless( open OUT, " >$output_file ") {
13 say " Can't write <$output_file> ! ";
14 }
15 while(<IN>) {
16 s/Fred/Larry/gi;
17 print OUT $_;
18 }
19 # -----------------------------------------------------------#
20 # 只读<,只写>,追加写>>,默认就是读写
21 #-----------------------------------------------------------#
2 # Source: Learning Perl, chapter9,exercise-2
3 # Date: 2012-01-19
4 # Author: xiaodongrush
5 #-----------------------------------------------------------#
6 use 5.010;
7 $input_file = $ARGV[ 0];
8 $output_file = $ARGV[ 0] . " .out ";
9 unless(! open IN, " <$input_file ") {
10 say " Can't read <$input_file> ! ";
11 }
12 unless( open OUT, " >$output_file ") {
13 say " Can't write <$output_file> ! ";
14 }
15 while(<IN>) {
16 s/Fred/Larry/gi;
17 print OUT $_;
18 }
19 # -----------------------------------------------------------#
20 # 只读<,只写>,追加写>>,默认就是读写
21 #-----------------------------------------------------------#
1
#
-----------------------------------------------------------#
2 # Source: Learning Perl, chapter9,exercise-3
3 # Date: 2012-01-19
4 # Author: xiaodongrush
5 #-----------------------------------------------------------#
6 use 5.010;
7 $text = " fred&wilma&fred&wilma&fred&wima ";
8 say " text = $text ";
9 @array = split /fred/gi, $text;
10 foreach( @array) {
11 s/wilma/Fred/gi;
12 }
13 $text = join Wilma, @array;
14 say " text = $text ";
15 <STDIN>;
16 # -----------------------------------------------------------#
17 #1.该解法是用Fred作为分割符,将字符串分开,然后,将分开的
18 # 字符串中的wilma环卫Fred,然后再用Wilma将分开的字符串连起来
19 #2.书中解法是,首先对字符串chomp,保证不含\n,然后将Fred都换为
20 # \n,接着讲Wilma都换为Fred,最后将\n都换为Wilma
21 #-----------------------------------------------------------#
2 # Source: Learning Perl, chapter9,exercise-3
3 # Date: 2012-01-19
4 # Author: xiaodongrush
5 #-----------------------------------------------------------#
6 use 5.010;
7 $text = " fred&wilma&fred&wilma&fred&wima ";
8 say " text = $text ";
9 @array = split /fred/gi, $text;
10 foreach( @array) {
11 s/wilma/Fred/gi;
12 }
13 $text = join Wilma, @array;
14 say " text = $text ";
15 <STDIN>;
16 # -----------------------------------------------------------#
17 #1.该解法是用Fred作为分割符,将字符串分开,然后,将分开的
18 # 字符串中的wilma环卫Fred,然后再用Wilma将分开的字符串连起来
19 #2.书中解法是,首先对字符串chomp,保证不含\n,然后将Fred都换为
20 # \n,接着讲Wilma都换为Fred,最后将\n都换为Wilma
21 #-----------------------------------------------------------#
1
#
-----------------------------------------------------------#
2 # Source: Learning Perl, chapter9,exercise-4
3 # Date: 2012-01-19
4 # Author: xiaodongrush
5 #-----------------------------------------------------------#
6 use 5.010;
7 $^I = " .bak ";
8 $text = " ## Copyright (C) 2012 by Yours Truly\n ";
9 while(<>) {
10 if(/ # !/) {
11 $_ = $_ . $text;
12 }
13 print $_;
14 }
15 # -----------------------------------------------------------#
16 # 1. /i表示忽略大小写,/g表示全局匹配
17 # 2. $^I,在读入文件假设是word.txt,首先将其改名为word.txt.out,
18 # 然后创建一个空的word.txt文件,接着,word.txt.out的每一行,
19 # 并且通过print函数写入到word.txt文件中。
20 #-----------------------------------------------------------#
2 # Source: Learning Perl, chapter9,exercise-4
3 # Date: 2012-01-19
4 # Author: xiaodongrush
5 #-----------------------------------------------------------#
6 use 5.010;
7 $^I = " .bak ";
8 $text = " ## Copyright (C) 2012 by Yours Truly\n ";
9 while(<>) {
10 if(/ # !/) {
11 $_ = $_ . $text;
12 }
13 print $_;
14 }
15 # -----------------------------------------------------------#
16 # 1. /i表示忽略大小写,/g表示全局匹配
17 # 2. $^I,在读入文件假设是word.txt,首先将其改名为word.txt.out,
18 # 然后创建一个空的word.txt文件,接着,word.txt.out的每一行,
19 # 并且通过print函数写入到word.txt文件中。
20 #-----------------------------------------------------------#
1
#
-----------------------------------------------------------#
2 # Source: Learning Perl, chapter9,exercise-4
3 # Date: 2012-01-19
4 # Author: xiaodongrush
5 #-----------------------------------------------------------#
6 use 5.010;
7 $text = " ## Copyright (C) 2012 by Yours Truly\n ";
8 foreach( @ARGV) {
9 $files{ $_} = 1;
10 }
11 while(<>) {
12 if(/ # # Copyright/) {
13 delete $files{ $ARGV};
14 }
15 }
16 @ARGV = keys %files;
17 $^I = " .bak ";
18 if( @ARGV != 0) {
19 while(<>) {
20 if(/ # !/) {
21 $_ = $_ . $text;
22 }
23 print $_;
24 }
25 }
26 # -----------------------------------------------------------#
27 # 1. /i表示忽略大小写,/g表示全局匹配
28 # 2. $^I,在读入文件假设是word.txt,首先将其改名为word.txt.out,
29 # 然后创建一个空的word.txt文件,接着,word.txt.out的每一行,
30 # 并且通过print函数写入到word.txt文件中。
31 #-----------------------------------------------------------#
2 # Source: Learning Perl, chapter9,exercise-4
3 # Date: 2012-01-19
4 # Author: xiaodongrush
5 #-----------------------------------------------------------#
6 use 5.010;
7 $text = " ## Copyright (C) 2012 by Yours Truly\n ";
8 foreach( @ARGV) {
9 $files{ $_} = 1;
10 }
11 while(<>) {
12 if(/ # # Copyright/) {
13 delete $files{ $ARGV};
14 }
15 }
16 @ARGV = keys %files;
17 $^I = " .bak ";
18 if( @ARGV != 0) {
19 while(<>) {
20 if(/ # !/) {
21 $_ = $_ . $text;
22 }
23 print $_;
24 }
25 }
26 # -----------------------------------------------------------#
27 # 1. /i表示忽略大小写,/g表示全局匹配
28 # 2. $^I,在读入文件假设是word.txt,首先将其改名为word.txt.out,
29 # 然后创建一个空的word.txt文件,接着,word.txt.out的每一行,
30 # 并且通过print函数写入到word.txt文件中。
31 #-----------------------------------------------------------#
输出略,与前一题类似。
3. 文件