Perl 学习笔记——基本数据类型

基本数据类型:标量、标量数组、标量散列

类型 字符 例子 用于哪种名字
标量(单数变量) $ $cents 一个独立的值(数字或字符串)
数组(复数变量、标量数组) @ @large 一列值,用数字键(key)
散列(复数变量、标量散列) % %interest 一组值,用字符串键
子例程 & &how 一段可以调用的Perl代码
typeglob * *struck 所有叫struck的东西

单数变量

标量可以赋予:整数、浮点数、字符串,甚至指向其他变量或对象的引用。未初始化的变量会在需要的时候自动存在,按照常规初始化为空值,""或0。根据使用的地方不同,变量会被自动解释成字符串、数字或真假。

$ary = \@myarray; # 引用一个命名数组
$ary = [1,2,3,4,5]; # 引用一个未命名数组
$hsh = \%myhash;  # 引用一个命名散列
$hsh = {Na => 19, cl => 35}; # 引用一个未命名散列
$sub = \&mysub;   # 引用一个命名子例程
$sub = sub{print $state} # 引用一个未命名子例程
$fido = new Camel "Amelia"; # 引用一个对象

双引号进行变量内插和反斜杆内插(比如\n转换成换行符),单引号取消内插,反引号执行外部程序并返回程序输出,将所有输出行作为单个字符串赋给标量

$pet = "Camel"; #字符串
$sign = "I love my $pet"; #带内插的字符串,双引号进行变量内插 variable interpolation
$cost = 'It costs $100';  #不带内插的字符串
$cwd = `pwd`; # 从一个命令输出的字符串 反引号将执行外部程序并返回程序的输出

在Perl中不同的操作符会要求特定类型的单数值作为参数,就称这个操作符给这些参数提供一个标量环境(字符环境、布尔环境、数字环境),Perl会根据环境自动将数据转换成正确的形式。
双引号环境 —> 内插环境

$camels = '123';
print $camels + 1, "\n"; # $camels被转换成数字后加一,最后又被转换回字符串 "\n" 内插环境,输出换行符

复数变量

在赋值等式右边提供列表(list)环境,数组是多个标量的有序列表,可以用标量在列表中的位置来访问其中的标量,列表中可以包含数字、字符串或同时包含这两者。(同时也可以包含对子数组和子散列的引用),要对一个数组赋值,只需简单地将这些值排列在一起,并用大括号括起来:@home = ("couch", "chair", "table", "stove");,即列表赋值。相反,如果在列表环境中使用@home,例如在列表赋值右边,可将数组值放入列表:($potato, $lift, $tennis, $pipe)=@home;;交换两个变量的值($alpha, $omega) = ($omega, $alpha)。数组是有序的,可以使用堆栈操作push和pop,堆栈就是一个有序列表,有一个开始的一个结尾,特别是有一个结尾。Perl将数组的结尾当成堆栈的顶端。对一个数组元素赋值写为$home[0]="couch";

散列,散列是一组无序标量,可以通过和每个标量关联的字符串进行访问。散列经常被称为关联数组。在Perl的内部实现中,散列的操作是通过对一个散列表查找完成的,这就是散列为什么这么快的原因,而且无论你在散列中存储多少数据,它总是很快。因为散列不是根据位置来访问的,因此在构建散列时必须同时指定值和键,仍然可以像给普通数组那样给散列赋值,但是在列表中的每一对元素都会被解释为一个键和一个值。两种赋值方法:

%longday = ("Sun", "Sunday", "Mon", "Monday", "Tue", "Tuesday", "Web", "Webnesday", "Thu", "Thursday", "Fri", "Friday", "Sat", "Saturday");
%longday = ("Sun" => "Sunday", 
			"Mon" => "Monday",
			"Tue" => "Tuesday", 
			"Web" => "Webnesday",
			"Thu" => "Thursday", 
			"Fri" => "Friday",
			"Sat" => "Saturday",
		   );

Perl能将散列以一种奇怪的顺序转换回键/值列表。通常使用keys函数来抽取散列的键,但抽取出来的键也是无序的。用sort函数可以很容易地对它进行排序,然后可以使用排过序的键以你想要的顺序获取值。通过{}获取单个的散列元素,比如$longday{"Web"},注意因为是在处理标量,因此在longday前面使用$,而不是%,%代表整个散列。
再例如$wife{"Jacob"} = ["Leah", "Rachel", "Bilhah", "Zilpah"];,散列元素引用未命名数组,使用$wife{"Jacob"}[0]="Leah";

你可能感兴趣的:(#,Perl,perl)