perl自学笔记整理二

开篇:如果说perl世界里,标量指的是单数的话,那么复数指的就是列表和数组。

列表指的是标量的有序集合;
数组则指的是存储列表的变量;
无论列表还是数组都可以包含无数多个元素。

一)访问数组中的元素

1) 访问数组中的元素 
例如:
[[email protected] fuxi]# cat a1.pl 
#!/usr/bin/perl
#a1
$fred[0] = "yabba";        #将值yabba赋值给数组$fred的第零个元素$fred[0] ;
$fred[1] = "dabba";
$fred[2] = "doo";
foreach(0..2) {
print "$fred[$_]\n";
}
[[email protected] fuxi]# perl a1.pl 
yabba
dabba
doo

$number = 2.7881;
print $fred[$number - 1];     #结果和print $fred[1]相同。

$blank = $fred[ 142_857 ];    #未使用的数组元素,会得到 undef 的结果
$blanc = $mel;                        #未使用的标量 $mel, 也会得到 undef 的结果。

2、特殊的数组索引值

例如:

$num = @fred;        #数组@fred中元素的个数为$num个,取数组中元素的总个数!!!

$rocks[0] = ‘bedrock‘;            #第一个元素
$rocks[1] = ‘slate‘;                    #第二个元素
$rocks[2] = ‘lava‘;                    #第三个元素
$rocks[3] = ‘crushed rock‘;    #第四个元素
$rocks[99] = ‘schist‘;                #第一百个元素,现在中间有95个 undef 元素
$#rocks            #  表示数组中最后一个元素的索引值:99
$rocks[-1]        # -1表示数组中的最后一个元素;
$rocks[-2]         # -2表示中间的元素;
$rocks[-3]        # -3表示第一个元素;

3、列表直接量

在圆括号中用逗号隔开的一系列值。
例如:
(1, 2, 3)
(1, 2, 3,)            #相同的三个数字(末尾的逗号会被忽略)
("fred", 4.5)
(1..100)        #100个整数构成的列表
( )            #空列表;零个元素
(1..5) 
(1.7..5.9)
(0, 2..6, 10, 12)        #与(0, 2, 3, 4, 5, 6, 10, 12)相等
("zhangsan", "lisi", "wangwu", "zhaoliu")

4、qw简写

qw(zhangsan lisi wangwu zhaoliu)
qw!zhangsan lisi wangwu zhaoliu!
qw/zhangsan lisi wangwu zhaoliu/
qw"zhangsan lisi wangwu zhaoliu"
qw#zhangsan lisi wangwu zhaoliu#
qw$zhangsan lisi wangwu zhaoliu$
qw%zhangsan lisi wangwu zhaoliu%

注意:不管怎么说,对于qw引起来的内容,Perl都会将其当成单引号内的字符串来处理(所以,在qw构建的列表中,不能像双引号一样使用\n或$fred).其中的空白符会被抛弃。和单引号内的字符串一样,两个连续的反斜线,表示一个真实的反斜线

5、列表的赋值

($fred, $barney, $dino) = ("flintstone", "rubble", undef )
($betty[0], $betty[1]) = ($betty[1], $betty[0]);        #互换两者的值
($fred, $barney) = qw;    #忽略掉末尾两个元素
($wilma, $dino) = qw[flintstone];    # $dino被设为undef

@rocks = qw/ bedrock slate lava/;
@tiny = ( );
@giant = 1..1e5;
@stuff = (@giant, undef, @gaint);
$dino = "granite";
@quarry = (@rocks, "crushed rock", @tiny, $dino);

@copy = @quarry;     #将数组@quarry复制给@copy

6、pop、push、shift和unshift对比总结

[[email protected] fuxi]# cat a2.pl 
#!/usr/bin/perl
#本程序演示pop , push, shift, unshift的功能
print "The first, show pop function.\n";
my @array = 1..5;
print "The origin \@arry contains : @array\n";
my $a=1;
while (@array) {
print "$a --> @array \n";
 pop @array;
$a += 1;
}
print "------------------------------------- \n";
print "The second, show push function.\n";
my @array1 = undef;
print "The origin \@array1 contains : @array1\n";
my $b=1;
while ($b <= 5) {
 push @array1, "$b";
print "$b --> @array1 \n";
$b += 1;
}
print "------------------------------------- \n";
print "The third, show shift function.\n";
my @array2 = 1..5;
print "The origin \@array2 contains : @array2\n";
my $c=1;
while (@array2) {
print "$c --> @array2 \n";
 shift @array2;
$c +=1;
}
print "------------------------------------- \n";
print "The fourth, show unshift function.\n";
my $d=1;
my @array3 = undef;
while ($d <= 5) {
 unshift @array3, "$d";
print "$d --> @array3 \n";
$d += 1;
}
[[email protected] fuxi]# perl a2.pl 
The first, show pop function.
The origin @arry contains : 1 2 3 4 5
1 --> 1 2 3 4 5 
2 --> 1 2 3 4 
3 --> 1 2 3 
4 --> 1 2 
5 --> 1 
------------------------------------- 
The second, show push function.
The origin @array1 contains : 
1 -->  1 
2 -->  1 2 
3 -->  1 2 3 
4 -->  1 2 3 4 
5 -->  1 2 3 4 5 
------------------------------------- 
The third, show shift function.
The origin @array2 contains : 1 2 3 4 5
1 --> 1 2 3 4 5 
2 --> 2 3 4 5 
3 --> 3 4 5 
4 --> 4 5 
5 --> 5 
------------------------------------- 
The fourth, show unshift function.
1 --> 1  
2 --> 2 1  
3 --> 3 2 1  
4 --> 4 3 2 1  
5 --> 5 4 3 2 1

8、splice操作符

9、字符串中的数组内插

@rocks  = qw( bedstone redstone greenstone yellowstone whitestone);
print "The stones are : @rocks \n";        #数组内插后,各个元素会以空格隔开,但是首尾元素前后不会加空格,需要的话                                   可以自行添加。

@fred = qw(hello dolly);
$y = 2;
$x = "This is $fred[1]‘s place";            #
$x = "This is $fred[$y -1]‘s place";     #打印结果同上

@fred = qw(eating rcks is wrong);
$fred = "right";        #接下来我想打印出"this is right[3]"
print "this is $fred[3]\n";   # 用到了 $fred[3], 打印 "wrong"
print "this is ${fred}[3]\n";     # 打印 "right" (用花括号避开误解)
print "this is $fred"."[3]\n";       #还是打印 "right" (用分开的字符串避开误解)
print "this is $fred\[3]\n";    #还是打印"right" (用反斜线避开误解)

10、foreach控制结构

foreach 控制变量 (数组或列表) {
        循环体执行语句; 
}

11、perl最喜欢用的默认变量: $_

例如:
foreach (1..10) {
    print "I can count to $_\n";  #如果你在循环开头位置未指定控制变量,那么perl会默认使用$_ 
}
或者

$_ = "123";
print ;         #这里会直接打印123

12、reverse操作符

reverse会读取数组的值,并按相反顺序赋值。
比如:
@fred = (1..5);
@fred_new = reverse @fred;
print "@fred_new\n";        #会打印出5 4 3 2 1
@aaa = reverse 1..5;        #同上

注意:reverse会返回次序相反的列表, 但它并不会修改传进来的参数。假如返回值无处可去,那么这种操作也就变得毫无意义:
reverse @fred;        #错误: 这不会修改 @fred
@fred = reverse @fred;        #这样才好

13、sort操作符

sort操作符,一般对列表(也可以是数组)元素排序,默认是按ASCII码排序即:(数字-->大写字母-->小写字母,标点符号随机到各处)。
相对@rocks数组内元素排序
sort @rocks;    #错误
@rocks = sort @rocks;     #这样是正确的。

14、each操作符

15、标量上下文与列表上下文

16、在标量上下文中使用产生列表的表达式
例如
@backwards = reverse qw / yabba dabba doo /;
#会变成 doo, dabba, yabba
$backwards = reverse qw/ yabba dabba doo /;
#会变成 oodabbadabbay

17、在列表上下文中使用产生标量的表达式

@betty = ( );    #清空一个数组的方法

18、强制指定标量上下文
偶尔在列表上下文的地方,你想要强制引入标量上下文,这可以使用伪函数scalar.
例如:
@rocks = qw( talc quartz jade obsidian );
print "How many rocks do you have? \n";
print "I have", @rocks, " rocks!\n";        #错误, 这会输出各种石头的名称
print "I have", scalar @rocks, " rocks!\n";   #对了,这就可以打印除石头的种数了。

19、列表上下文中的

@lines = ;    # 读入所有行
chomp(@lines);        # 去掉所有的换行符
chomp(@lines = );    #读入所有行, 换行符去除。

时间: 2024-10-05 11:30:01

perl自学笔记整理二的相关文章

perl自学笔记整理(三)

关于perl中的子程序 1.定义子程序sub sub_programe_name {    程序语句体: } 2.调用子程序 &sub_programe_name; 3.子程序的返回值在子程序的执行过程中,它会不断进行运算.而最后一次运算的结果(不管是什么),都会被自动当成子程序的返回值.[[email protected] fuxi]# cat a4.pl #!/usr/bin/perl#subroutinesub sum_of_fred_and_barney {print "Hey

perl自学笔记整理

输入与输出 1.读取标准输入(键盘输入的形式都称标准输入)$line = ;                #读取下一行chomp($line);                    #截掉最后的换行符 chomp($line = );    #习惯用法,效果同上如果读到文件结尾(end-of-file), "行输入"操作符就会返回undef.这样的设计是为了配合循环使用,可以自然地跳出循环:while (defined($line = )) {    print "I s

JAVA基础自学笔记整理(二 )某些数据类型的姿势

啊哈哈哈哈哈~刚打完三国杀,好爽,于是有看了一下视频. 有关于类型的转换,有两种:自动和硬肛(强制). 1.自动类型转换 容量小的数据类型可以自动转为容量大的数据类型. e.g int i = 3; double d = i; float f = i; double d2 = f; //直接换 不用什么硬肛的姿势. 可以直接将int常量直接赋值给byte,short,char等类型变量,而不需要强制类型转只要                不超出其表数范围. e.g byte(-128~~127

JAVA基础自学笔记整理(二 )运算符哟哈哈

嗯三国杀好好玩,不过和朋友开黑一天开的好累,哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈. 这次看的视频是关于运算符的...怎么感觉有点鸡肋,不是很想画时间码字了,毕竟很多语言的运算符都一样(我只知道JAVA和C,就装个逼233) 嗯真方便,哈哈哈哈哈哈哈哈哈哈哈 再吃个图 对了布尔值的逻辑运算符是从左到右的,如果只通过左边的能确定值是多少,右边的就不用计算了(不管对错). 额.大概这么多,不过好像还有三目运算符

Deep Learning(深度学习)学习笔记整理(二)

本文整理了网上几位大牛的博客,详细地讲解了CNN的基础结构与核心思想,欢迎交流. [1]Deep learning简介 [2]Deep Learning训练过程 [3]Deep Learning模型之:CNN卷积神经网络推导和实现 [4]Deep Learning模型之:CNN的反向求导及练习 [5]Deep Learning模型之:CNN卷积神经网络(一)深度解析CNN [6]Deep Learning模型之:CNN卷积神经网络(二)文字识别系统LeNet-5 [7]Deep Learning

Perl学习笔记(二)--标量数据

一.  数字 Perl内部并不存在整数值-程序中用到的整型常量会被转换成等效的浮点数值 浮点数直接量 小数点与前置的正负号都是可选的,数字后面也可以加上用"e"表示的10的次方标识符(即指数表示法).例如: 1.25 7.25e45(7.25乘以10的45次方) -12e-24(负12乘以10的-24次方) -1.2E-23(另一种表示法:字母E也可以是大写的) 2. 整数直接量 0 -40 92283377112222  #可以表示为922_833771_12222,看起来更清楚 二

Java自学笔记(二)

这几天学的内容真是很有料,Java这门语言的核心设计思想,开始慢慢揭开面纱. 话说回来,这两天在看<疯狂Java讲义>的时候,偶尔会对一些问题产生疑惑,而这时候我重新拿起了<Thinking in Java>,我发现这本书现在对我来说,当作一本参考式的资料还是非常不错的,因为里面的内容,真的太丰富了,而且原理级的内容也讲的很到位,打算看完<疯狂>,再把<Thinking in Java>过一遍. static关键字: 好吧,先说为什么会出现这样的东西.我们说

老笔记整理二:网页小问题汇总

最近有一些小问题.想在这里写出来.一是方便大家排错,再是自己也整理一下. 1.很傻的小问题...参数提交方式有一个应该是form而不是from.(英语老师,我对不起你...) 2.用超链接传参数,在?后面不能有空格. 3.表单里的东西(如文本域)放完后,记得要改name(名字)和value(数值).否则在后台会报错.通常是fun.asp里 ExcuteRs里mCmd.execute出错. 4.where 语句里字符串一定要加单引号,基本都是' "  &  变量  &  "

angular2自学笔记(二)---八大主要构造块

angular的思想:总是把数据访问工作委托给一个支持性服务类. Angular 应用的:用 Angular 扩展语法编写 HTML 模板, 用组件类管理这些模板,用服务添加应用逻辑, 用模块打包发布组件与服务. 我们通过引导根模块来启动该应用. Angular 在浏览器中接管.展现应用的内容,并根据我们提供的操作指令响应用户的交互. angular2的八大主要构造块:模块 (module)组件 (component)模板 (template)元数据 (metadata)数据绑定 (data b