学习perl的splice函数

发布时间:2021-01-22编辑:脚本学堂
splice函数
有了操作数组两端的函数那么一定也会有操作数组中间部分的函数,这个函数就是splice,splice函数有三个作用。第一个作用是向数组中间的一部分插入内容。例如:

splice函数
有了操作数组两端的函数那么一定也会有操作数组中间部分的函数,这个函数就是splice,splice函数有三个作用。第一个作用是向数组中间的一部分插入内容。例如:
@d=(1..9);
my @e=("a".."f");
splice(@d,2,2,@e); #这地方好像不正确,运行的结果没有得到
将会得到12abcdef56789,注意这里是从第二个开始插入,不是从下标为2的元素开始插入的。splice的第二个功能是删除,例如在刚才的代码上面再加上:
splice(@d,2,6);
                
将可以得到1256789;splice的第三个功能就是删除到末尾。语法为:
splice(@d,2);
                
就是从第二个开始,删除到末尾。我们还应该有一个可以把整个数组合并成一个标量的函数。这个函数就是join,join有两个参数,第一个参数是合并时放在元素之间的分割符,第二个是进行操作的数组。

例如:
my
@g=(1,2,3);
join(" ",@g);
将可以得到“1
2 3”,还有三个函数我们昨天已经见过了,就是undef,chop和chomp。undef(@a); 的作用是把@a的内容清空。chop(@a);
的作用是把数组内每个元素的末尾去一个字符。而chomp(@a); 的作用则是把数组内的每一个元素的末尾的换行符去掉。

perl的map函数的使用:
语法
map EXPR, LIST
map BLOCK LIST
 
定义和使用
对list中的每个元素执行EXPR或BLOCK,返回新的list。对每一此迭代,$_中保存了当前迭代的元素的值。

返回值
如果返回值存储在scalar标量中,则代表map()返回数组的元素个数;
如果返回值存储在list中,则代表map()函数的数组;

实例1 (将单词首字母大写)
 

复制代码 代码如下:

#!/usr/bin/perl -w

@myNames = ('jacob', 'alexander', 'ethan', 'andrew');
@ucNames = map(ucfirst, @myNames);
$numofucNames = map(ucfirst, @myNames);

foreach $key ( @ucNames ){
 print "$keyn";
}
print $numofucNames;

结果:
Jacob
Alexander
Ethan
Andrew
4

实例2、 (获得所有的书名中包含的单词,且转化为大写)
 

复制代码 代码如下:

my@books = ('Prideand Prejudice','Emma', 'Masfield Park','Senseand Sensibility','Nothanger Abbey',
'Persuasion',  'Lady Susan','Sanditon','The Watsons');

my@words = map{split(/s+/,$_)}@books;
my@uppercases = map uc,@words;
foreach $upword ( @uppercases ){
 print "$upwordn";
}

结果:(Perl map函数的输入数组和输出数组不一定等长,在split起过作用之后,当然@words的长度要比@books长了。)
PRIDEAND
PREJUDICE
EMMA
MASFIELD
PARK
SENSEAND
SENSIBILITY
NOTHANGER
ABBEY
PERSUASION
LADY
SUSAN
SANDITON
THE
WATSONS

实例3 、(将多余2位的数字提取到新的list)
 

复制代码 代码如下:

#!/usr/bin/perl -w

my @buildnums = ('R010','T230','W11','F56','dd1');
my @nums = map{/(d{2,})/} @buildnums;
foreach $num (@nums){
  print "$num n"
}

$a = 'RRR3ttt';
@yy = $a=~/RRR.*ttt/;
$numofyy = $a=~/RRR.*ttt/;
print "@yyn";
print "$numofyyn" ;

@yy2 = $a=~/(RRR).*(ttt)/;
$numofyy2 = $a=~/(RRR).*(ttt)/;
print "@yy2n";
print "$numofyy2n";
print "$1 $2";

结果:(正则表达式匹配后返回的为数组或长度,取决于表达式中是否有()或者接收的变量类型)
010
230
11
56
1
1
RRR ttt
1
RRR ttt