Perl语言了解

关键词

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;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值