关键词
use strict | 规定编码风格要符合一定的规范 |
use lib qw(/xx/xx) | 指定模块安装路径,然后可以引用模块下的文件 |
use Getopt::Long qw (:config pass_through) | perl中解析命令行参数的模块 ,pass_through应该是文件参数 |
use Carp qw ( croak confess ) | 出错时,标记错误信为当前模块 |
use Distra::Branding | 导入Distra下的Branding文件,Distra模块在上边lib里导入 |
use Distra::Switch::Config qw( get_distra_conf_property ) | 导入Config文件中定义的一个函数 |
use POSIX qw ( strftime ) | 格式化输出时间的模块,比如 say strftime '%Y-%m-%d %H:%M:%S',localtime 返回了 # 2021-06-20 03:41:47 |
use Cwd 'abs_path' | 获取指定文件和目录的绝对地址,比如 $myfile= "1.txt" abs_path($myfile) |
my my $todays_date my ($tz, $utc_offset) | 声明变量 声明单个变量 声明多个变量要用(),不然只生效第一个 |
sub | 声明子函数 |
exit | 终止子函数 |
变量
Perl有三种数据类型:标量,标量数组,哈希
#声明标量,以$开头
$age=29;
$str1="beginnersbook";
#声明数组,以@开头
@code = (1, 2, 3)
取值用 $code[0]
#声明哈希,以%开头
%user= ('name', '张三', 'age', 14);
取值用 $user{'name'}
变量内插
# 在一个双引号字符串中,如果包含一个变量名,这个部分将会被替换成该变量的值,对单引号无效
# 变量未定义时为空
$name = "xx"
$desc = "my name is $name" # print my name is xx
$desc = "my name is $names" # 这里的$names就为会空
可以用{}来强制规定内插的变量
$desc = "my name is ${name}s"
作为普通字符串时,用 \ 转义
$desc = "my name is \${name}" # print my name is \${name}
传参时$和\$(%和\%)的区别
# 不带\传元素本身
set_platform({
env => %env
});
# 带\是传递元素引用,这里传递hash的内存地址
set_platform({
env => \%env
});
操作符
=~ | 模式匹配,左边的字符串是否匹配右边的正则。 左边必须为字符串,比如 “xxx” =~ s/\/install\/([^\/]+)$// |
-> | 调用参数的一个方法,比如 $log->neverLogPasswords() |
:: | 类范围操作符,类似于java的 . |
=> | 为了传参时明确参数对应的标量,看下边的代码 |
$log = Distra::File::Log->new (
filename => $log_file,
mode => 'append',
maxlevel => '7',
mask_words => '1',
utc_offset =>$utc_offset,
tz => $tz,
);
# Log参数中的new方法如下:
sub new {
my $class = shift;
my %options = ();
my $self = bless \%options, $class;
# Set some defaults
$options{'filename'} = undef
...
...
return $self;
}
函数
1. defined($action):检查一个子过程是否已经被定义
if ( ! defined($action) ) {
lprint "Error - You must supply an action";
}
2. exists($actions{"$action"}):检查一个子过程是否已经被定义
3. eval : 类似java的try catch,执行代码,如果有异常就捕获,eval返回undef,错误代码保存在$@中
# 这里如果返回undef或存在错误码,都结束程序
my $env_ref = eval {
set_env($base_directory);
};
if ($@) {
lprint "Unable to determine environment";
exit 1;
}
elsif (!defined($env_ref)) {
lprint "Unable to determine environment";
exit 1;
}