1.打开文件
open (,"< ") or die "file open fail,$!\n";
$file = "/projects/.alias.csh";
open (readin,"< $file) or die "file $file open fail,$!\n";
2.对文件中的内容替换时
while($lines = ){
$lines =! s/alias/unalias/g;
print $lines;
}
将从文件句柄中获得到的内容,使用s///g替换,输出替换后的内容
eg:原文件:
alias hello 'echo hello'
输出
hello 'echo hello'
可以使用这个方法对变量中的头或者尾部空元素进行删除
$lines =~ s/\s*$//g;
$lines =~ s/^\s*//g;
3.对array(数组)进行grep
@aaa = ("aaa","bbb","ccc");
@zzz = grep /a*/,@aaa;##通过正则表达式找到@aaa中符合条件的元素,并且赋值给@zzz
4.变量嵌套
相比tcl,perl是可以变量嵌套的:
$aa = "xxx";
$xx = "yyy";
print "${${aa}}\n"
结果:
yyy
5.合并数组
@aaa = ("aaa","bbb","ccc");
@bbb = ("xxx","yyy","ccc");
@ccc = (@aaa,@bbb)
6.拼接符
$aa = /project; $aa = /project;
$bb = 20210625; 或 $aa .= "\/20210625";
$cc = $aa."/".$bb;
print $cc;
输出:/project/20210625
7.使用system进行运行linux命令时(cd mkdir等)
issue1 : 当使用cp -rf时
system("cp -rf $lines /projects/FILE/");
如果提示
cp:missing destination file operand after****
是因为$lines里包含了换行符,工具就会理解成cp -rf $lines然后在执行/projects/FILE/,
解决:
需要chomp函数。
chomp($lines);
system("cp -rf $lines /projects/FILE/");
issue2:当mkdir时
mkdir是不允许跨级建立文件夹的(及不支持递归建立文件夹)如现在只有/projects这一级时,
mkdir /peojects/aaa/bbb 这样是会报错的,需要一级一级mkdir
解决:
不使用system函数,直接使用
`exec mkdir -p /peojects/aaa/bbb`
issue3:当想在perl 内调用csh 脚本时;因为source只csh的内嵌命令,需要在perl中指定解释器
system("/bin/csh" , "./try.csh");
8.切割数组 、join、spilt
@corner = ("cworst_T_40","rcworst_T_40");
对上面的数据想分别得到rc corner和温度:
foreach $corner (@Corner) {
@all_para = split /_/,$corner;
$Tem = $all_para[-1];
@rc_para = join("_",@all_para[0.. $#all_para-1]);
}
1.$#all_para 表示数组最后一个元素的角标,上面的例子里这个值就是2(并不是3,因为从0
开始计算)
2.[0.. $#all_para-1]:这个是为了获取@all_para中第一个到倒数第二个的元素,要注意在$#前
面是需要空格的。
3.join("连接符",“字符串”)
split("分隔符","字符串")或 split /"分隔符"/,"字符串",分隔符默认为空格
例子如代码处。
9.日期函数
$current_date = localtime();
print $current;
暂时确定不可以直接 print localtime();
10.除法计算
perl的除法和tcl是不同的,或自动得到浮点数,(tcl如果想得到浮点数,需要将一个数变成浮点数类型才可以,否则自动向下取整)
$a = 3;
$b = 2;
$c = $a / $b;
print $c;
1.5