perl trick

时间:2023-03-08 21:07:30
perl trick

一、die if以及文件的操作

#!/usr/bin/perl -w
use strict; die "USAGE:\n\tperl $0 <><><>\n\n" 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"\t";
$line[0] =~ s/\s//g;
$line[2] =~ s/\s//g;
my $k = $line[0]."\t".$line[2];
$h{$k}=$k;
} my $header =readline(QUERY);#读取一行
print OUT $header;#写入用print my %header_idx; chop($header);
my @headers = split("\t", $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\n";
}

 三、时间打印

my $datestring = localtime();
print "starting time: $datestring \n"; #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 "\n";
#2018-10-19 15:36:21变成中文时间