Perl数据类型

在Perl中,主要有3种基本的shu数据类型:标量、数组、哈希。

目录

 

标量

特殊字符

数组

qw//运算符

数组序列号

数组大小

数组操作函数

数组切割

扫描二维码关注公众号,回复: 2874574 查看本文章

数组合并

从列表选择元素

哈希变量

检测元素是否存在

获取哈希大小

添加/删除元素

变量上下文


标量

标量以$开始,具体的变量类型可以是整数、浮点数、字符和字符串等。

$name = "hunk";      #string
$age = 25;           #int
$height = 1.73;      #float
$bigfloat = 1.2e23; 
$octal = 0377;
$hexa = 0xff;
$string = '
first line
second line
';


print "bigfloat = $bigfloat\n";
print "octal = $octal\n";
print "hexa = $hexa\n";
print "$string\n";

Output:

[root@izuf682lz6444cynn96up0z basic]# ./type.pl 
bigfloat = 1.2e+23
octal = 255
hexa = 255

first line
second line

特殊字符

__FILE__, __LINE__, __PACKAGE__,当前执行脚本的文件名、行号、包名。注意是两条下划线,这些特殊字符是单独的标记,不能写在字符串中。

#!/usr/bin/perl -w
print "fileName: ". __FILE__ . "\n";
print "lineNum : ". __LINE__ . "\n";
print "pkgName : ". __PACKAGE__ . "\n";
[root@izuf682lz6444cynn96up0z basic]# ./type.pl 
fileName: ./type.pl
lineNum : 4
pkgName : main

数组

数组以@开始。可以通过$arrayName[0]来访问数组元素或者给数组赋值,下标也是以0开始。负数下标从反向开始读取。

#!/usr/bin/perl -w
@array = ("hunk", "Jack");
print "$array[0], $array[1]\n";

如果访问数组的下标越界了,仅仅是获取不到元素而已,不影响程序运行,有-w的时候会发出警告,可见-w的使用很重要。这一点,和C/C++等语言不一样,数组访问越界程序直接就crash了。

qw//运算符

用qw//运算符定义数组,它返回字符串列表,数组元素以空格分离。

#!/usr/bin/perl -w
@sites = qw/google
taobao
baidu
/;
print "$sites[0] $sites[1] $sites[2]\n"
[root@izuf682lz6444cynn96up0z basic]# ./type.pl 
google taobao baidu

数组序列号

Perl提供了可按序列输出的数组形式,格式:起始值 + .. + 结束值。

#!/usr/bin/perl 
@var_10 = (10..20);
@var_abc = ('a'..'y');
print "@var_10\n";
print "@var_abc\n";
[root@izuf682lz6444cynn96up0z basic]# ./type.pl 
10 11 12 13 14 15 16 17 18 19 20
a b c d e f g h i j k l m n o p q r s t u v w x y

数组大小

比较特殊的是Perl用$#来取数组的最大索引。

#!/usr/bin/perl 
@varArray = (1, 2, 3);
$varArray[50] = 51;
$size = @varArray;
$maxIndex = $#varArray;
print "$size $maxIndex\n";
[root@izuf682lz6444cynn96up0z basic]# ./type.pl 
51 50

数组操作函数

push(@array, list) 将列表的值放到数组的末尾
pop(@array) 弹出数组最后一个值,并返回它
shift(@array) 弹出数组第一个值,并返回它。数组索引值也依次减1
unshift(@array, list) 将列表插入到数组前面,并返回新数组的元素个数
splice(@array, OFFSET, LENGHT, LIST) 替换数组元素
split(PATTERN, $string) 将字符串转换为数组
join(EXPR, @array) 将数组用EXPR连接成字符串
sort(@array) 对数组进行排序
#!/usr/bin/perl -w
@sites = ('google', 'tengxun', 'taobao');
push(@sites, "baidu");
print "1.@sites\n";
$num = unshift(@sites, "sina");
print "2.@sites & num = $num\n";
$eleLast = pop(@sites);
print "3.@sites & eleLast = $eleLast\n";
$eleFirst = shift(@sites);
print "4.@sites & eleFirst = $eleFirst\n";
splice(@sites, 0, 3, 'alibaba', "veritas");
print "5.@sites\n";

$string = "baidu,veritas,alibaba";
@strArray = split(',', $string);
print "6.$strArray[0] $strArray[1]\n";
$site = "www-baidu-com";
@siteSub = split('-', $site);
print "7.$siteSub[0] $siteSub[1]\n";
print "8.@strArray\n";
@strArray = sort(@strArray);
print "9.@strArray\n";
[root@izuf682lz6444cynn96up0z basic]# ./array.pl 
1.google tengxun taobao baidu
2.sina google tengxun taobao baidu & num = 5
3.sina google tengxun taobao & eleLast = baidu
4.google tengxun taobao & eleFirst = sina
5.alibaba veritas
6.baidu veritas
7.www baidu
8.baidu veritas alibaba
9.alibaba baidu veritas

数组切割

#!/usr/bin/perl
@sites = qw/google baidu tengxun alibaba weibo/;
@subSites = @sites[1, 3 ,4];
print "@subSites\n";
[root@izuf682lz6444cynn96up0z basic]# ./array1.pl 
baidu alibaba weibo

数组合并

#!/usr/bin/perl -w
@firstArray = (4, 5, 6);
@SecondArray = (1, 2, 3);
@all = (@firstArray, @SecondArray);
print "all = @all\n";
[root@izuf682lz6444cynn96up0z basic]# ./array2.pl 
all = 4 5 6 1 2 3

从列表选择元素

列表可以当做一个数组使用,在列表后面指定索引值可以读取指定的元素。

#!/usr/bin/perl -w
@list = (1, 2, 3, 4, 5, 6)[1..3];
print "all = @list\n";
[root@izuf682lz6444cynn96up0z basic]# ./array2.pl 
all = 2 3 4

哈希变量

哈希以%开始,是key-value的集合。可以通过$hashName{key}来访问元素。

#!/usr/bin/perl 
%hash = ('name', 'hunk', 'age', 25);
print "$hash{'name'} $hash{'age'}\n";

检测元素是否存在

#!/usr/bin/perl
%data = ('google'=>'google.com', 'baidu'=>'baidu.com');
if(exists($data{'google'})){
    print "google exist.\n";
} else {
    print "google not exist.\n";
}
[root@izuf682lz6444cynn96up0z basic]# ./hash.pl 
google exist.

获取哈希大小

先得到哈希的key或value的数组,再获取数组大小。

#!/usr/bin/perl
%data = ('google'=>'google.com', 'baidu'=>'baidu.com');
@keys = keys %data;
$keySize = @keys;
@values = values %data;
$valueSize = @values;
print "$keySize $valueSize\n";
[root@izuf682lz6444cynn96up0z basic]# ./hash.pl 
2 2

添加/删除元素

#!/usr/bin/perl
%data = ('google'=>'google.com', 'baidu'=>'baidu.com');
@keys = keys %data;
$size = @keys;
print "1.size: $size\n";
$data{'alibaba'} = 'alibaba.com';
@keys = keys %data;
$size = @keys;
print "2.size: $size\n";
delete $data{'baidu'};
@keys = keys %data;
$size = @keys;
print "3.size: $size\n";
[root@izuf682lz6444cynn96up0z basic]# ./hash.pl 
1.size: 2
2.size: 3
3.size: 2

变量上下文

所谓上下文:指的是表达式所在的位置。上下文是由等号左边的变量类型来决定的。

#!/usr/bin/perl -w
@array = ('Jack', 'hunk');
@arrayCopy = @array;

$size = @array; #size is the number of array
print "@array & @arrayCopy\n";
print "$size\n";

Output:

[root@izuf682lz6444cynn96up0z basic]# ./type.pl 
Jack hunk & Jack hunk
2

如上,@array是数组,它应用在了两个不同的上下文中。第一个是复制给另一个数组,第二个是获取到了它的元素个数,准确的讲应该是数组大小。

猜你喜欢

转载自blog.csdn.net/u012299594/article/details/81606288