Perl —— 输入输出&子程序&正则表达
Posted 懒癌终结君
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Perl —— 输入输出&子程序&正则表达相关的知识,希望对你有一定的参考价值。
6、输入与输出

重要!!!


这里的EOF可以自己更改,自己编写的。

#!/usr/bin/perl -w
use strict;
print "Please input your name : ";
chomp (my $name = <STDIN>); #记得把换行符删掉
print "Your name is $name
";
<STDIN>
只读取键盘输入的一行,自动有一个换行符,记得去掉!!!
输出:
sqc@DESKTOP-IUM4B9V:~$ perl inout.pl
Please input your name : songlanlan
Your name is songlanlan

输出时
%
的地方会用后面从数据代替,例如:
%s
用
$user
替代;
%d
用
$days
替代。


意思:打开文件
/home/user/text.txt
, 这个文件的内容绑定到
IN
文件句柄中;如果文件报错,要终止文件(
die
)并且打印出报错信息(
$!
)。
之后就可以进行操作,操作完成之后,一定要关闭文件(close IN
)

把一些东西输出到文件中。
print +文件句柄+要写的内容
就可以把内容输出到刚打开的那个文件中去。
记得关闭文件!!!


练习:
(1)读入cds.fa文件并循环打印每一行
#!/usr/bin/perl -w
use strict;
open IN, "cds.fa" or die $!;
while(my $line = <IN>){
chomp $line;
print "$line
";
}
close IN;
输出:
sqc@DESKTOP-IUM4B9V:~$ perl read.pl
TCGCCTTTAACTCGGCTACT
GYGKYFYTDFCRFYTGKUYM
GUYGVYCYFLLIKUHHUMKA
KUHLJJHGVTGYUHLGLGUL
UGIHLLUYFUTUYYHILHUU
JO;HIKJBHBJVGVKGLHI;
J;;HILGYGNTFLGKUHOIP
KJOJOIJOIHUPUHMOM;IO
LL;HOJUHIUG FKLLIUGY
(2)第一题中的文件输出到cds2.fa中
#!/usr/bin/perl -w
use strict;
open IN, "cds.fa" or die $!; #先每一行读取,然后输出到另一个文件中(相当于要把A文件输出到B中,要先读取A中每一行内容,再将读出的内容输出到B——分两个步骤)
open OUT,"> cds2.fa"or die $!;
while(my $line = <IN>){
chomp $line;
print OUT "$line
";
}
close OUT;
close IN;
先每一行读取,然后输出到另一个文件中(相当于要把A文件输出到B中,要先读取A中每一行内容,再将读出的内容输出到B——分两个步骤。
输出:
sqc@DESKTOP-IUM4B9V:~$ perl read.pl
sqc@DESKTOP-IUM4B9V:~$ ll
total 36
drwxr-xr-x 1 sqc sqc 512 May 4 19:20 ./
drwxr-xr-x 1 root root 512 Apr 30 21:10 ../
-rw------- 1 sqc sqc 2740 May 4 00:11 .bash_history
-rw-r--r-- 1 sqc sqc 220 Apr 30 21:10 .bash_logout
-rw-r--r-- 1 sqc sqc 3771 Apr 30 21:10 .bashrc
drwxr-xr-x 1 sqc sqc 512 Apr 30 21:10 .landscape/
-rw-rw-rw- 1 sqc sqc 0 May 4 18:25 .motd_shown
-rw-r--r-- 1 sqc sqc 807 Apr 30 21:10 .profile
-rw------- 1 sqc sqc 11182 May 4 19:19 .viminfo
-rw-rw-rw- 1 sqc sqc 912 May 2 22:52 array.pl
-rw-rw-rw- 1 sqc sqc 336 May 3 20:48 array2.pl
-rw-rw-rw- 1 sqc sqc 0 May 3 20:10 array2pl
-rw-rw-rw- 1 sqc sqc 231 May 3 20:55 array3.pl
-rw-rw-rw- 1 sqc sqc 189 May 4 18:51 cds.fa
-rw-rw-rw- 1 sqc sqc 189 May 4 19:20 cds2.fa #在这里呀!
7、子程序
子程序:一段具有特定功能的代码块。
一般在多次使用某程序时会将其定义为子程序,这样使代码看起来更加简洁。

sub
开头,再加上子程序的名字。
@_
代指子程序的参数列表

例如:在
{}
中定义的my,只能作用于这个花括号中,而不能作用于其它花括号。
8、正则表达与模式匹配


(匹配相当于查找是否存在)

s
+ 原来的 + 替换的

一个一个对应替换


+
/ab+/是指b+





练习:
my $str="One line in windows
";
(1)将$str中的Windows换行符"r "替换为linux换行符" "
#!/usr/bin/perl -w
use strict;
my $str= "One line in windows
";
print "$str";
$str =~ s/
/
/;
print "$str";
输出:
sqc@DESKTOP-IUM4B9V:~$ perl pattern.pl
One line in windows #原来的
One line in windows #linux换行
#都是换行符,所以输出无区别
(2)将$str中的单词windows的第一个w替换成大写W
#!/usr/bin/perl -w
use strict;
my $str= "One line in windows
";
print "$str";
$str =~ s/w/W/;
print "$str";
输出:
sqc@DESKTOP-IUM4B9V:~$ perl pattern.pl
One line in Windows
(3)匹配获取
#!/usr/bin/perl -w
use strict;
$str =~ m/One (.*) in/; #括号内是随意字符
print "$1
";
输出:
sqc@DESKTOP-IUM4B9V:~$ perl pattern.pl
line
(4)将$str中所有不在单词边界上的i替换成大写I
#!/usr/bin/perl -w
use strict;
$str =~ s/Bi/I/; #默认是只替换第一个
print "$str";
$str =~ s/Bi/I/g; #全局替换后面加上g
print "$str";
输出:
sqc@DESKTOP-IUM4B9V:~$ perl pattern.pl
One lIne in Windows
One lIne in WIndows
以上是关于Perl —— 输入输出&子程序&正则表达的主要内容,如果未能解决你的问题,请参考以下文章