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

摘要:
“;foreach$temp_acctsub{my$result=$g_bll_map{$temp_acctsub};printFDATA$result;}close;简要描述:读取文件test.txt的内容。如果文件不存在,请使用die命令输出错误信息;IX。读取文件夹角色:读取文件夹的内容简单示例:opendirDH,$g_work_pathordie”无法打开DIR!

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

免责声明:文章转载自《Perl脚本学习经验(二)常用命令举例》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇element el-table 合计在横拉滚动条的下面,正确展示应该是滚动条在合计下面iOS平台Cordova插件的开发方法下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

《Linux 应用编程》—第13章 Linux 多线程编程

目录 1 多线程概述 1.1 什么是线程 1.2 线程与进程的关系 1.3 为什么使用多线程 2 POSIX Threads 概述 3 线程管理 3.1 线程ID 3.2 创建与终止 1. 创建线程 2. 终止线程 3. 线程范例1 3.3 连接与分离 1. 线程分离 2. 线程连接 3. 线程范例2 3.4 线程属性 属性对象...

员工管理系统(完整版)

转载请注明出处:http://blog.csdn.net/u012860063 #include <stdio.h> #include <windows.h> #include <string.h> struct worker { int num; char name[20]; char zhiche...

Mysql 简单问题汇总(持续更新)

主从架构相关问题 问题现象:从机连接主机时报错 [ERROR] Slave I/O: error connecting to master 'repl@192.168.0.50:3306' - retry-time: 60 retries: 1, Error_code: 2003 可能的原因有: a、网络不通(是否打开防火墙) b、复制用...

fastcgi apache fcgi

 FastCGI 安装与配置相关软件包:httpd 2.2.14      //注意版本 这个版本不会出问题   注:apache httpd安装  fcgi-2.4.0.zipmod_fastcgi-2.4.6.zip 请仔细阅读其中的README  php 5.2.17 配置apache: (默认安装在/usr/local 文件夹下) #配置http...

STM32 HAL库 UART使用printf

STM32 HAL库 UART使用printf // 添加这个函数 int fputc(int ch,FILE *f) { uint8_t temp[1]={ch}; HAL_UART_Transmit(&UartHandle,temp,1,2); } MDK设置:勾选Use Micro LIB 测试板子:STM32F746NG-...

#!/usr/bin/env 脚本解释程序的作用

the Zimbu programming language http://www.zimbu.org/getting-started ------------------------------------------------------------------------------ #!/usr/bin/env在linux的一些bash的脚本,需...