一.chomp 作 用:去除读入字符串的换行符,去除\n或者\r\n: 简单举例: while(<FDATA>) { my $tmp_record = $_; chomp ($tmp_record); } 简单说明:此时$tmp_record变量的结束处已经不包含换行符; 二.split 作 用:根据某个模式分割字符串; 简单举例: my @record= split(/\|/,$tmp_record); 简单说明:定义一个record数组,根据“|”分割变量$tmp_record内容; 三.while 作 用:循环遍历 简单举例: open(FDATA, "<test.txt")||die "Failed to open test.txt: $!"; while(<FDATA>) { my $tmp_record = $_; chomp ($tmp_record); my @record= split(/\|/,$tmp_record); } close(FDATA); 简单说明:读取test.txt文件,循环遍历文件中的内容; 四.foreach 作 用:循环遍历 简单举例: foreach $ckey(sort keys %g_bll) { my $tmp_record = $g_bll{$ckey}; chomp ($tmp_record); my @record= split(/\|/,$tmp_record); } 简单说明:循环遍历%g_bll_charge_map容器中的内容; 五.substr 作 用:截取字符串 简单举例: 例一:my $FirstFlag = substr(“abcdefg”,0,1); 例二:my $FirstFlag = substr(“abcdefg”,-1,1); 简单说明:有三个参数,分别是截取的父串,从0开始的初始位置,字串的长度; 例一中截取abcdefg字符串中从0开始长度为1的字符串,结果返回a; 例二中截取abcdefg字符串中最后一个字符串,结果返回g; 六.sort 作 用:简单排序 简单举例: foreach $ckey(sort keys %g_bll) { my $tmp_record = $g_bll{$ckey}; chomp ($tmp_record); my @record= split(/\|/,$tmp_record); } 简单说明:循环遍历容器中的内容,按照key值排序;exists 七.exists 作 用:查看hash中是否存在某个值 简单举例: if(exists $g_bll{date}) { } 简单说明:查看容器$g_bll中是否存在键值为date的数据,存在返回true,不存在返回false; 八.读取文件 作 用:打开文件句柄,读取文件内容 简单举例: open(FDATA, "<<test.txt")||die "Failed to open test.txt: $!"; foreach $temp_acctsub(sort keys %g_bll_map) { my $result = $g_bll_map{$temp_acctsub}; print FDATA $result ; } close(FDATA); 简单说明:读取文件test.txt中的内容,如果不存在该文件,用die命令输出错误信息; 九.读取文件夹 作 用:读取文件夹下的内容 简单举例: opendir DH,$g_work_path or die "Cannot open the DIR!"; foreach $dirname(readdir DH) { if($dirname ne "." and $dirname ne "..") { my $filename = $g_work_path .$dirname; $file_name_map{$filename} = $dirname; } } closedir(DH); 简单说明:和读取文件不同的是使用opendir和closedir; 十.向文件中写内容 作 用:读取文件夹下的内容 简单举例: open(FDATA, ">>test.txt")||die "Failed to open test.txt: $!"; foreach $key(sort keys %g_fee_info_map) { ........ } print FDATA $temp_info . "\r\n"; close(FDATA); 简单说明:打开文件句柄,>>向文件中追加; 十一.map容器的使用 作 用:key值匹配value值 简单举例: $g_bill_map{$id} = $info; 简单说明:以id为键值,存储不同用户的信息;如果key值相同,value值会被覆盖; 十二.map容器的嵌套使用 作 用:value值仍旧是一个map,双层map的使用 简单举例: $g_info_map{$filekey}{$acctsub} = $temp_subinfo_fee; -----存储用户信息 my %g_subinfo_map = %{$g_info_map{$filekey}}; -----提取用户信息 简单说明:存储用户信息----使用$filekey和$acctsub两个键值存储$temp_subinfo_fee,实际上这边有两个map: 首先通过$filekey可以查处一个用用户信息的map,用户信息的map是以$acctsub为键值,$temp_subinfo_fee为value; 提取用户信息----定义了一个%g_subinfo_map的map来存储通过$filekey查询出的用户信息; 十三.perl脚本中调用lunix命令 作 用: 简单举例: `mkdir -p $g_out_put_path`; 简单说明:创建文件夹,用``; 十四.perl脚本中和数据库交互 作 用:通过脚本访问数据库 简单举例: sub get_bll_charge_from_database() { my $g_sql = "select b.acct_id || '|' || b.sub_id || '|' || b.item_id || '|' || b.cos || '|' || b.charge || '|' || b.bill_id || '|' || b.number \n" . " from bll_info; \n"; &create_unload_sql_file($g_bll_sqlfile,$g_bll_file,$g_sql); `sqlplus $dbstr \@$g_bll_sqlfile`; my(@szContent) = `cat $g_bll_file|grep ORA-`; foreach (@szContent){ my $tmpContent = $_; if($tmpContent =~ /ORA-(\d)+/) #这里出错了 { print $tmpContent; return; } } } sub create_unload_sql_file() { #$_[0] -> sqlfile;$_[1] -> datafile;$_[2] -> sql; open(FSQLFILE,">$_[0]") || die "Failed to open $_[0]:$!"; printf FSQLFILE "set serveroutput on \n"; printf FSQLFILE "set time on \n"; printf FSQLFILE "set timing on \n"; printf FSQLFILE "set linesize 1000 \n"; printf FSQLFILE "set echo off \n"; printf FSQLFILE "set term off \n"; printf FSQLFILE "set heading off \n"; printf FSQLFILE "set pagesize 0 \n"; printf FSQLFILE "set trimspool on \n"; printf FSQLFILE "set feedback off \n"; printf FSQLFILE "set time off \n"; printf FSQLFILE "set timing off \n"; printf FSQLFILE "spool $_[1] \n"; printf FSQLFILE "$_[2] \n"; printf FSQLFILE "spool off \n"; printf FSQLFILE "exit; \n"; close(FSQLFILE); } 简单说明:1. $dbstr数据库连接串; 2. `sqlplus $dbstr \@$g_bll_sqlfile`; 不能直接跟SQL,将SQL写到一个文件中,执行文件; 3.create_unload_sql_file方法对数据库进行设置,并访问数据库执行SQL; 4.将结果写入到$g_bll_file文件中;
以上是我在自己写perl脚本中常用的一些命令,希望可以给新手一点帮助。
|
请发表评论