perl trick

一、die if以及文件的操作

#!/usr/bin/perl -w
use strict;

die "USAGE:
	perl $0 <><><>

" if @ARGV != 3;
#$0表示脚本名,@ARGV表示参数个数

open (INPUT1 ,"$ARGV[0]") or die "can not open $ARGV[0]!";

open (QUERY ,"$ARGV[1]") or die "can not open $ARGV[1] !";

open (OUT ,">$ARGV[2]") or die "can not open $ARGV[2]!";
#注意下标是从0开始,>表示以写入方式打开

my %h;

while(<INPUT1>)
{
    chomp;
    my @line = split"	";
    $line[0] =~ s/s//g;
    $line[2] =~ s/s//g;
    my $k = $line[0]."	".$line[2];
    $h{$k}=$k;
}

my $header =readline(QUERY);#读取一行
print OUT $header;#写入用print

my %header_idx;

chop($header);
my @headers = split("	", $header);#对变量进行split

#scalar()获取数组长度
for(my $i=0; $i < scalar(@headers); $i++){
      $headers[$i]=~s/s//g;
      $header_idx{$headers[$i]}=$i;
}

 二、遍历哈希

while ( my ($key,$value) = each %ENV ) 
{
        print "$key:$value
";
 }

 三、时间打印

my $datestring = localtime();
print "starting time: $datestring 
";

#Fri Oct 19 15:36:21 2018这样的英文结果也许并不理想

sub sub_format_datetime {
        my($sec, $min, $hour, $day, $mon, $year, $wday, $yday, $isdst) = @_;
        $wday = $yday = $isdst = 0;
        sprintf("%4d-%02d-%02d %02d:%02d:%02d", $year+1900, $mon+1, $day, $hour, $min, $sec);
}


#sprintf()函数
'''
$result = sprintf("%08d",$number);让$number有8个前导零。 

$rounded = sprintf("%.3f",$number); 

让小数点后有3位数字

'''
my $start = sub_format_datetime( localtime() );
print $start;
print "
";
#2018-10-19 15:36:21变成中文时间

  

原文地址:https://www.cnblogs.com/always-fight/p/9772363.html