Perl —— 输入输出&子程序&正则表达

Posted 懒癌终结君

tags:

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









6、输入与输出

Perl —— 输入输出&子程序&正则表达

重要!!!

Perl —— 输入输出&子程序&正则表达

Perl —— 输入输出&子程序&正则表达

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

Perl —— 输入输出&子程序&正则表达

#!/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

Perl —— 输入输出&子程序&正则表达

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


Perl —— 输入输出&子程序&正则表达

Perl —— 输入输出&子程序&正则表达

意思:打开文件 /home/user/text.txt, 这个文件的内容绑定到 IN文件句柄中;如果文件报错,要终止文件( die)并且打印出报错信息( $!)。

之后就可以进行操作,操作完成之后,一定要关闭文件(close IN)

Perl —— 输入输出&子程序&正则表达

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

记得关闭文件!!!

Perl —— 输入输出&子程序&正则表达

Perl —— 输入输出&子程序&正则表达
练习:
(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、子程序

子程序:一段具有特定功能的代码块。

一般在多次使用某程序时会将其定义为子程序,这样使代码看起来更加简洁

Perl —— 输入输出&子程序&正则表达

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


Perl —— 输入输出&子程序&正则表达

例如:在 {}中定义的my,只能作用于这个花括号中,而不能作用于其它花括号。


8、正则表达与模式匹配

Perl —— 输入输出&子程序&正则表达

Perl —— 输入输出&子程序&正则表达

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


Perl —— 输入输出&子程序&正则表达

s + 原来的 + 替换的


Perl —— 输入输出&子程序&正则表达

一个一个对应替换

Perl —— 输入输出&子程序&正则表达

Perl —— 输入输出&子程序&正则表达

+ /ab+/是指b+


Perl —— 输入输出&子程序&正则表达

Perl —— 输入输出&子程序&正则表达

Perl —— 输入输出&子程序&正则表达

Perl —— 输入输出&子程序&正则表达

Perl —— 输入输出&子程序&正则表达


老师的几个建议:

练习:
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 —— 输入输出&子程序&正则表达的主要内容,如果未能解决你的问题,请参考以下文章

perl数据结构

在notepad++中运行perl和python的方法

Perl——标量&列表数组

perl输出重定向

Perl HTML::解析器错误;未定义的子程序 &main::1

Ruby——输入&输出