• Perl脚本学习经验(二)常用命令举例


    一.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脚本中常用的一些命令,希望可以给新手一点帮助。

  • 相关阅读:
    c# in deep 之LINQ简介(1)
    今天开通博客
    bzoj 4009 接水果 整体二分
    区间求mex的几种方法
    充分性,必要性,充分条件,必要条件的区别
    表达式求值(noip2015等价表达式)
    selenium-模拟鼠标
    selenium学习-ActionChains方法列表
    高手指导中手的书籍
    新生
  • 原文地址:https://www.cnblogs.com/huochangjun/p/Perl.html
Copyright © 2020-2023  润新知