1.time
use POSIX qw(strftime);
use feature qw(say);
my $time = localtime(time); #标量上下文返回标量
say $time;
say time; #time返回时间值
#my ($sec,$min,$hour,$day,$mon,$year-1990,@other) = localtime(time); #wrong
my ($sec,$min,$hour,$day,$mon,$year,@other) = localtime(time); #列表上下文返回列表
#say $year+1990."-".$mon.'-'.$day.'-'.$hour.':'.$min.":".$sec;
printf "%d-%d-%d %d:%d:%d\n",$year+1990,$mon,$day,$hour,$min,$sec; #localtime(time)返回的$year需要加上1990才能得到期望值
$datestring = strftime "%Y-%m-%d %H:%M:%S", localtime; #直接指定localtime返回值的格式和内容选取
printf("时间日期 - $datestring\n");
2.进程
`CMD`:返回程序执行结果给变量,如@var = `ls`;
system(CMD):直接返回程序执行结果到STDOUT,即屏幕,如system(“ls”);
*不能执行cd等shell内建命令(which 是查不到路径的)
3.getoptions
use Getopt::Long;
use Smart::Comments;
GetOptions( #哈希形式,后面是引用,符合条件,后面的值自动改变
'verbose+' => \$verbose, #命令行参数每次出现-verbose或-v时,$verbose+1
'mark!' => \$mark, #命令行参数出现-mark时,$mark=1,-nomark时,$mark=0
'debug=i' => \$debug, #-debug=2,则$debug=2
'paraHash=s' => \%paraHash,
#-paraHash接收哈希形式的参数,存放到%paraHash里,如-paraHash a=1 -paraHash b="2"
'paraArray=s' => \@paraArray,
#-paraArray接收字符串到@paraArray里,如-paraArray='a' -paraArray=1,多个参数时,每个参数都要-paraArra=
'interge:i' => \$interger,
#=s表示接收字符串,数字会自当转化为字符串,但如果=i则只能接收数字,不能接收字符串,:i可以不给参数,默认为0
);
4. eval
eval捕获异常到$@中,有两种形式:eval BLOCK({}中的代码是block块),eval expr(字符串表达式,如"ls")。
eval BLOCK编译时检查错误,包括语法错误,eval expr运行时才检查,如果有语法错误,运行时才报错。
两种形式的返回值都是返回最后一行表达式的求值,或使用return关键字显式的返回,如果发生错误,返回undef。
$average = eval { $total / $count}; ## 同 eval {$average = $total / $count};
my $str=eval {return 100};
my $var = 1;
#eval '$var='; #运行时报错
eval{$var=}; #编译报错
warn $@ if $@;