当前位置: 首页 > 工具软件 > Perl > 使用案例 >

perl语言相关

燕意蕴
2023-12-01

读取文件

文件以读取方式打开

例子:读取in.txt文件,如果读取失败,则打印“con not open file1",并结束。

open(file1,"< in.txt") or die "con not open file1";

格式 < 表示读取,>表示写入,>>表示追加

open(文件句柄,"< 文件名.txt") or die "con not open file1";

文件以写入方式打开

open(file2,"> in.txt") or die "con not open file2";

将< 换成 >即可。

去除换行并写入文件

while(<file1>){
	chomp; #去掉每一行的换行
	#$_表示一个自增的变量,在这里表示每一行打印完,自动计数到下一行
	print file2 $_;#把当前行去掉换行符后,打印到file2里

关闭文件

close (file1);
close(file2);

完整代码

open(file1, "< in.txt") or die "con not open file1";
open(file2, "> out.txt") or die "con not open file2";

while( <file1> ){
  chomp;        
  print file2 $_;    
}

close( file1 );
close( file2 );

相关知识点

$_ :默认的输入、输出和格式匹配空间(默认参数的意思,不指定时,为程序处理的上一个变量)
chomp :去掉字符串末尾的&/,默认情况下 $/为\n(默认情况下,去掉换行符)

文件的一些操作

:open(文件句柄,”<文件名“)或者直接open(文件句柄,”文件名“)
文件必须已经事先创建好,否则会返回0,打不开。
:open(文件句柄,”>文件名“)
文件若不存在,那么创建;若存在,内容清空,写入全新的数据;
追加:open(文件句柄,”>>文件名“)与写类似,不同点在于:内容不会被清空,新内容追加到原文后;
读写:open(文件句柄,”+<文件名“):可读可写,通过tell()函数在文件内部移动;通过seek()函数进行定位。若文件不存在,则创建;若文件存在,原来的数据不会被清除。

哈希表

例子:有下面四个人,他们名字分别是 Li Fei,Liu Qiang,Zhuang Ming,Tian Hua,写一个 Perl 程序,做到输入他们的姓,就能告诉这个人的名。

哈希是 key/value 对的集合。
Perl中哈希变量以百分号 (%) 标记开始。
访问哈希元素格式:${key}。

%hash();
$hash{Li} = "Fei";
$hash{Liu} = "Qiang";
$hash{Zhang} = "Ming";
$hash{Tian} = "Hua";\

my $a;

while (1) {
	print "Enter Xing:";
	$a = <STDIN>;   #获取键盘输入
	chomp $a;
	if($a ~~ "Exit") {
		die "Exit System\n";
	}
	else {
		print $hash{$a};
		print "\n";
	}

正则匹配

例子:用 python 或者 perl 写程序,在 xxx.log 中找到 fail 单词

读取“xxx.log”文件,如果打不开,就直接结束 die

文件操作时 < 表示读取,> 表示写入,>> 表示追加

如果读取成功,则返回一个不为 0 的数,作为判断依据

my $value;  #声明一个变量

$value = open(file1,"<xxx.log>");#读取文件xxx.log到file1,<代表读取

#如果不为0,说明打开了

if($value){
	print "open\n\n";
}
else {
#否则,没有成功打开,die结束
	die "cannot open \n\n";
}


逐行读取文件,并进行正则匹配

my $input_line;  #声明一个变量

#while(<文件句柄>),逐行读取
#每一行的值会自动保存在一个$_的特殊变量中
while(<file1>){
#获取当前一行的值,保存在$input_line
	$input_line = $_;
#打印当前的行
	print "$input_linr\n";
#正则表达式,匹配 m/.../或者/.../
#=~表示匹配,!~表示不匹配
#判断当前行的字符串中有没有“fail",=~ m/fail/


	if($input_line =~  m/fail/){  #匹配则成功打印

#$&或$MATCH 表示前一次成功进行匹配的字符串
	print "match:$&\n\n";
	}
}

关闭文件

close file1;

$_ 默认输入,在文件逐行读取时,就是每次读取的内容
$& 或 $MATCH 上一次成功匹配的字符
=~ 匹配
!~ 不匹配
m/str/ 或/str/ 正则表达式,看是否含有字符串 str
<, >, >> 代表读取、写入、追加

 类似资料: