Perl数据类型

Perl 是一种弱类型语言,所以变量不需要指定类型,Perl 解释器会根据上下文自动选择匹配类型。

perl菜鸟教程

Perl 有三个基本的数据类型:标量、数组、哈希:

\表示解析转移字符

标量

标量是 Perl 语言中最简单的一种数据类型。这种数据类型的变量可以是数字,字符串,浮点数,不作严格的区分。在使用时在变量的名字前面加上一个 $,表示是标量。例如:

$a=100;
$b="str";
print "a = $a\n";
print "b = $b\n";

数组

数组变量以字符 @ 开头,索引从 0 开始,如:

@arr=(1,2,3)
print "\$arr[0] = $arr[0]\n";

数组序列号:Perl 提供了可以按序列输出的数组形式,格式为 起始值 + .. + 结束值,实例如下:

#!/usr/bin/perl
 
@var_10 = (1..10);
@var_20 = (10..20);
@var_abc = (a..z);use Data::Dumper;
 
print "@var_10\n";   # 输出 1 到 10
print "@var_20\n";   # 输出 10 到 20
print "@var_abc\n";  # 输出 a 到 z

数组长度:数组长度返回的是数组物理大小,而不是元素的个数。

#!/uer/bin/perl
 
@array = (1,2,3);
$array[50] = 4;
 
$size = @array;
$max_index = $#array;

#数组长度为51,最大下标为50 
print "数组长度:  $size\n";    # 输出51
print "最大索引: $max_index\n"; # 50 

添加和删除数组元素:

Perl 提供了一些有用的函数来添加和删除数组元素。

如果你之前没有编程经验,可能会问什么是函数,其实我们之前使用的 print 即是一个输出函数。

下表列出了数组中常用的操作函数:

序号类型和描述
1 push @ARRAY, LIST

将列表的值放到数组的末尾

2 pop @ARRAY

删除数组的最后一个值

3 shift @ARRAY

弹出数组第一个值,并返回它。数组的索引值也依次减一。

4 unshift @ARRAY, LIST

将列表放在数组前面,并返回新数组的元素个数。

切割数组:我们可以切割一个数组,并返回切割后的新数组

#!/usr/bin/perl
 
@sites = qw/google taobao runoob weibo qq facebook 网易/;
 
@sites2 = @sites[3,4,5];
 
print "@sites2\n";

执行以上程序,输出结果为:

weibo qq facebook

替换数组元素:数组元素替换使用 splice() 函数,语法格式如下:

splice @ARRAY, OFFSET [ , LENGTH [ , LIST ] ]

参数说明:

  • @ARRAY:要替换的数组。
  • OFFSET:起始位置。
  • LENGTH:替换的元素个数。
  • LIST:替换元素列表。

以下实例从第6个元素开始替换数组中的5个元素:

#!/usr/bin/perl
 
@nums = (1..20);
print "替换前 - @nums\n";
 
splice(@nums, 5, 5, 21..25); 
print "替换后 - @nums\n";

 

将字符串转换为数组:将字符串转换为数组使用 split() 函数

split [ PATTERN [ , EXPR [ , LIMIT ] ] ]

参数说明:

  • PATTERN:分隔符,默认为空格。
  • EXPR:指定字符串数。
  • LIMIT:如果指定该参数,则返回该数组的元素个数。
#!/usr/bin/perl
 
# 定义字符串
$var_test = "runoob";
$var_string = "www-runoob-com";
$var_names = "google,taobao,runoob,weibo";
 
# 字符串转为数组
@test = split('', $var_test);
@string = split('-', $var_string);
@names  = split(',', $var_names);
 
print "$test[3]\n";  # 输出 o
print "$string[2]\n";  # 输出 com
print "$names[3]\n";   # 输出 weibo

将数组转换为字符串:Perl 中将数组转换为字符串使用 join() 函数,语法格式如下:

join EXPR, LIST

参数说明:

  • EXPR:连接符。
  • LIST:列表或数组。
#!/usr/bin/perl
 
# 定义字符串
$var_string = "www-runoob-com";
$var_names = "google,taobao,runoob,weibo";
 
# 字符串转为数组
@string = split('-', $var_string);
@names  = split(',', $var_names);
 
 
# 数组转为字符串
$string1 = join( '-', @string );
$string2 = join( ',', @names );
 
print "$string1\n";
print "$string2\n";

哈希

哈希是一个无序的 key/value 对集合。可以使用键作为下标获取值。哈希变量以字符 % 开头。

#方式1
%h=('a'=>1,'b'=>2); 

#方式2:第一个为key 第二个为value
%data = ('google', 45, 'runoob', 30, 'taobao', 40); 

print "\$data{'google'} = $data{'google'}\n";

print "\$h{'a'} = $h{'a'}\n";

#为每个key设置value

$data{'google'} = 'google.com';
$data{'runoob'} = 'runoob.com';
$data{'taobao'} = 'taobao.com';

#读取部分哈希值
%data = (-taobao => 45, -google => 30, -runoob => 40); 
@array = @data{-taobao, -runoob}; 
print "Array : @array\n";

#读取keys
@names = keys %data; 
print "$names[0]\n"; 
print "$names[1]\n"; 
print "$names[2]\n";

#读取所有Value值
@urls = values %data; 
print "$urls[0]\n"; 
print "$urls[1]\n"; 
print "$urls[2]\n";

#判断key是否存在:exist函数
if( exists($data{'facebook'} ) )
{ 
  print "facebook 的网址为 $data{'facebook'} \n"; 
} 
else 
{ 
  print "facebook 键不存在\n"; 
}

#获取哈希大小(元素个数)
@keys = keys %data; 
$size = @keys; 
print "1 - 哈希大小: $size\n"; 
@values = values %data; 
$size = @values; 
print "2 - 哈希大小: $size\n";

#添加和删除元素
# 添加元素 $data{'facebook'} = 'facebook.com'; 
@keys = keys %data; $size = @keys; 
print "2 - 哈希大小: $size\n"; 
# 删除哈希中的元素 delete $data{'taobao'}; 
@keys = keys %data; 
$size = @keys; print "3 - 哈希大小: $size\n";

#迭代哈希
foreach $key (keys %data)
{
  print "$data{$key}\n";
}

while(($key, $value) = each(%data))
{
  print "$data{$key}\n";
}

 为未初始化的哈希赋值也可以这样写

my %has1=();
#这样健不能省略引号
#my %has1=(these,are);
#为哈希赋值,key可以省略引号
$has1{these}="are";
print "\%has1=$has1{these}";

哈希嵌套哈希

use Data::Dumper;
#
哈希嵌套 my %hash; $hash{these}{are}{just}{a}{bunch}{of}{words} = 88; $hash{these}{are}{just}{a}{bunch}{of}{things} = 42; $hash{these}{things} = 33; print Dumper %hash;

输出结果

$VAR1 = 'these';
$VAR2 = {
          'are' => {
                     'just' => {
                                 'a' => {
                                          'bunch' => {
                                                       'of' => {
                                                                 'words' => 88,
                                                                 'things' => 42
                                                               }
                                                     }
                                        }
                               }
                   },
          'things' => 33
        };

posted @ 2021-01-28 11:06  WellMandala  阅读(285)  评论(0编辑  收藏  举报