系列文章目录
Perl有且只有3种变量类型:标量(saclar)、数组(array)和散列(hash)
标量
使用my来声明标量,变量存储的内容可以是字符串,数字,引用,文件句柄等等,而且同一个标量可以先存储数字,然后存储字符串。
注意:
- Perl的一些内建变量由全大写字母组成,所以我们最好避免创建全大写字母的变量名
- 变量区分大小写,$abc和$Abc是两个变量
标量赋值使用等号,左侧是标量名,右侧是被赋予的值。
my $num1 = 10;
my ($num2,$num3,$num4)=(1,2,3)
如果标量的值是字符串,使用双引号或单引号来包围字符串。双引号内如果有变量,则该变量会被实际的值替代。单引号则保留原始字符串形式。
my $str1 = 'ABC'
my $str2 = '$str1 xyz'; # $str1 xyz
my $str3 = "$str1 xyz"; # ABC xyz
单引号保留原始字符串形式除了两种特殊场景,字符串中本身就有单引号’和反斜杠
如果字符串中包含单引号和反斜杠,需要额外添加一个反斜杠进行转义:
my $str1 = 'here is \' and \\' # here is ' and \
字符串的拼接使用’.’
my $str1 = 'ABC'.'_'.'xyz' # ABC_xyz
数组
数组就是标量的集合。数组的名称必须以’@'符号开始,初始化如下:
my @array1 = (1,4,9,16);
my @array2 = ('ZheJiang','HangZhou');
通过’[]'来获取数组中某个位置的元素,注意这个元素是一个标量!
$array1[0]; # 1
当然也可以通过下标来给数组赋值:
$array1[0] = 2;
scalar函数会返回数组的大小:
$numofvars = scalar @vars;
print '@vars has',$numofvars,"element \n";
# @vars has 3 element
使用for循环来遍历数组:
for my $var (@someArray) {
sentences;
}
如果中途退出循环体,用last命令,相当于Python中的break语句。
for my $var (@someArray) {
if (condition1) {
last;
}
other sentences;
}
如果有嵌套的循环,last只会跳出最内层的循环。如果需要跳出最外层的循环,可以使用lable标记:
LABLE0:for my $var1 (@someArray1) {
LABLE1:for my $var2 (@someArray2) {
if (condition1) {
last LABLE0;
}
other sentences;
}
}
如果想略过循环体的后续语句进行下一次循环,而不是跳出循环,可以使用next命令:
for my $var (@someArray) {
if (condition1) {
next;
}
other sentences;
}
散列
散列就是无序的键值对,散列名必须以%开头,初始化如下:
%pcc_of = (
'ZheJiang' => 'Hangzhou',
'JiangXi' => 'NanChang',
'XiZang' => 'LaSa',
);
与数组类似,散列由圆括号包围。
依据键获取散列的值:
print $pcc_of{'JiangXi'},"\n";
注意:这里的键需要用花括号包围。
获取散列中的所有keys或values:
%pcc_of = (
'ZheJiang' => 'Hangzhou',
'JiangXi' => 'NanChang',
'XiZang' => 'LaSa',
);
print keys %pcc_of,"\n"
# ZheJiangJiangXi
散列可以通过delete函数进行删除操作
%pcc_of = (
'ZheJiang' => 'Hangzhou',
'JiangXi' => 'NanChang',
'XiZang' => 'LaSa',
);
delete $pcc_of{'ZheJiang'};
print keys %pcc_of,"\n"
# ZheJiang