文档章节

perl学习笔记-----------------------(12)

henni_719
 henni_719
发布于 2017/04/22 17:13
字数 1922
阅读 1
收藏 0

如果标量还没有赋任何值,可以给标量赋默认值。这里的技术依赖以下事实:未初始化的标量被设置为未定义量,对它可以使用defined函数测试。这段代码使用条件运算符?:,给$variable变量赋默认值,如果$variable并未被赋值,这个值存储在$defaultvalue变量中:

$defaultvalue=1;
$variable=defined($variable)?$variable:$defaultvalue;
print $variable;
int函数仅仅去掉一个数字的非整数部分而返回剩余部分,这意味着他对1.999999和1.00001都是返回1.用sprintf函数将数圆整到特定的十进制位数。perl分配内存空间来适合字符串的长度。perl内部使用unicode来存储它的字符数据。Perl连接运算符是点(.)perl可以通过使用单引号或双引号来创建字符串值作为标量:
$variable1="hello .";
$variable2='Hello again.';

单引号和双引号的区别:
1.perl会对双引号之间括起来的变量和特定表达式进行评估
2.perl将单引号之间的字符串不进行解释而是将其作为文字(也就是作为常量)
Perl存储字符串里的字符时使用Unicode格式,使用UTF-8编码。\N转义字符,可以使用它在文本中插入命名的unicode字符。例如:\N{WHITE SMILING FACE} 插入Unicode“笑脸”到文本中。可以使用诸如Develyn::Peek模块来检查标量的内部格式,但还有更简单的方法。使用位运算符And和否运算符来检查是否标量存储的是字符串:

$x=111;
$y="This is a string";
print '$x is in string format' if ($x & ~$x);
print '$y is in string format' if($y & ~$y);

按位与值:&
按位取反值:~
perl在内部使用C的函数sprintf将数字转换为字符串。perl使用C函数atof来用另一种方法将字符串转换为数字。转换过程是自动,它取决于工作环境,正如这个例子,数字100在打印之前被转换为字符串:
$x=100;
print $x;

如果需要的话,可以明确使用sprintf和atof。可以只是强迫字符串转换为数字量:标准方法只需在它的前面加上一个“0”如:

$number=0+"100"; 
print $number;

这个技术仅在字符串代表十进制数时可以使用。一些perl结构存储当前操作系统的错误,在数字环境下可以作为数字,也可以做为字符串。使用变量插值
将包含变量名的字符串括在双引号之间,perl会自动将该变量中存储的数值带到字符串中。

$text="Hello";
print "Perl says:$text!\n";
使用{}来设立想要插入作为某个单词的一部分的变量名,如:
$text="un";
print "Don't be ${text}happy.";

可以使用后倾标记号,即向后倾斜的单引号(`),让Perl将命令传递给操作系统。
$dirlist=`dir`;
print $dirlist;

如果将通用子程序的结果插入到字符串中,可以使用连接运算符来达到目的:
$string=$text . mysubroutine($data) . $text1;
用${}技术也可以把子程序的返回值插入到双引号之间的字符串中。如,如果想要将getmessage子程序的返回值插入到字符串中:
print "${&getmessage}";子程序的前缀必须使用&;
将标量函数的返回值插入到用双引号括起的字符串中如:print "text ${\(scalarfunction data)} text";
如果有返回表而非标量的子程序,可以这样使用匿名数组编辑器:
$string="text @{[listfunction data]} text";
在perl中,如果单词不能用其余任何方法解释,则环绕单词的引号是可选的。如下列例子显然是将字符串赋值给变量$text,因此
不需要引号:$text=hello;print $text;
例如像hello这样的单个词无引号的文本字符串称为"裸词"。可以使用裸词作为哈希表的索引,就像这样(如果裸词只是一个单词的长度;否则,需要使用引号):
$hash{"name"}="George Washington";
print $hash{"name"};
在某些情况下,裸词可能会与标号或文件句柄弄混了,这些情况下都不需要使用$这样的前缀。这种情况下,可以关掉perl对裸词的支持,这会使perl对任何不能解释为子程序名的裸词提出警告:use strict "subs";
q// ' ' 否 文字
qq// " " 是 文字
qx// `` 是 命令
qw// () 否 单词表
// m// 是 模式匹配
s/// s/// 是 替换
y/// tr/// 否 翻译
qq结构处理字符串中的双引号;
q结构使用单引号:$statement=q/print "Hello"/;eval $statement;
qw结构:可以简化表的初始化操作,因为qw在空格出分隔,不需要逗号和单引号;传递给qw的所有单词都被当作小写处理。如:
($first,$second,$third,$fouth)=qw/this is a test/;
print $first;


quotemeta函数具有在每个非字母或数字字符的前面添加反斜线的功能:
$text="I\ said\ \"Hello\.\"";等价于 $text=quotemeta('I said "Hello."');
Perl允许将标量以及其他类型如哈希表和数组组合成表。数组代表可以作为整体使用的几项。perl中内建的函数分为两组:处理标量的函数和处理表的函数。perl拥有表运算符,一对括号,可以使用逗号将括号中的元素分开来创建表。print运算符是表运算符。如果传递给它一个表,它会将表中的元素连接成字符串。perl将print看成表运算符而非函数。可以在表的最后一个元素后面加上逗号,这使以后添加元素变得容易:print(1,2,3,);
在表中使用表,嵌套在表里的任何元素都一次添加到整个表中。perl将这个过程称为表的”平坦化“当考虑将数组那样的表结构传递给子程序时,那些数组里的所有元素会被平坦化为一个表,包括分隔符如果序列的表元素是perl已理解的东西,则可以使用快捷方式来创建表。可以使用”..“标记。例如,将所有小写字母构成的表打印出来:print ("a".."z");
创建表之后,可以通过使用中括号(表索引运算符)来访问表中的单独元素。PS:表是基于0的。例如:如果有一个由字母a,b,c组成的表,可以这样访问元素1,即b:
$variable=(a,b,c)[1];
print $variable;
PS:可以使用[]来索引由函数返回的表,仅需一个标量返回值而非表时,这提供了处理表函数的简单方法。
经典的例子就是stat函数,它以表格式返回文件信息。下面就是stat返回的表元素情况:
元素0:dev——文件系统的设备号
元素1:ino——索引节点号
元素2:mode——文件模式(类型以及权限)
元素3:nlink——文件硬链接的数量
元素4:uid——文件拥有者的用户数字代号
元素5:gid——文件拥有者的组数字代号
元素6:rdev——设备标识符
元素7:size——文件的大小,以字节为单位
元素8:atime——文件创建以来最后一次访问时间
元素9::mtime——文件创建以来最后一次修改时间
元素10:ctime——文件创建以来索引节点号变更时间
元素11:blksize——文件系统输入/输出的优先模块尺寸
元素12:blocks——已分配的实际数量

© 著作权归作者所有

共有 人打赏支持
henni_719
粉丝 2
博文 466
码字总数 343938
作品 0
信阳
QA/测试工程师
私信 提问
Perl脚本学习笔记(二)

11. Perl没有Boolean类型,比较重要的是一点: 这意味着undef(很快会看到)为false。所有的引用(在Alpaca 书中有详细讨论)都是true。 12. chomp注意事项: (1)chomp 是一个函数。作为一个...

像教授
2017/11/26
0
0
Per学习笔记[3]

Per学习笔记 1.子程序 (1)子程序的定义可以在程序的任意位置,且不需要在定义之前有任何声明。 (2)子程序的定义是全局的,可以在子程序中使用全局变量。 (3)所有的Perl 子程序都会返回值,在P...

wbf961127
2017/11/12
0
0
xtrabackup学习笔记

wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.7/binary/tarball/percona-xtrabackup-2.4.7-Linux-x86_64.tar.gz yum -y install perl perl-devel libaio liba......

glassboy2009
2017/06/06
0
0
语言学习读书笔记PHP和asp.net编程语言哪个更有前途?

编程语言一直是学习计算机编程门专业的热门讨论话题,而我也选择了这个专业,入学一年了,马上面临着语言的选择问题,业余我需要选择一门编程语言作为重点研究对象,那么问题来了:到底是选择...

原创小博客
2018/05/30
0
0
Perl学习笔记[2]

1.数组和列表:数组是由括号括起来的且其元素由逗号分隔开的列表。 (1)数组和列表的第一个索引是0,每次按1递增。 (2)数组和列表中的每一个元素都是一个独立的标量值,这些标量值的类型是...

wbf961127
2017/11/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

多命令链命令参数

Commands: --install <link> <name> <path> <priority> [--slave <link> <name> <path>] ... 在系统中加入一组替换项. --remove <name> <path> 从 <名......

Pulsar-V
33分钟前
0
0
【转】go get命令使用socket代理

由于某些不可描述的原因,国内使用go get命令安装某些包的时候会超时导致失败,比如net包、sys包、tools包等。第一种解决办法就是自己从git上下载后添加链接到GOPATH中,比如: 1234...

yiduwangkai
35分钟前
0
0
Windows同步对象Event和Linux的条件变量

最近在看一些同步对象模拟的东东,特别对在Windows下如何模拟条件变量折腾了很久。 1 Windows同步对象Event 微软有一个很有意思的同步对象,某种程度上和Linux的条件变量很相似。但秉承微软一...

shzwork
42分钟前
1
0
从上往下打印出二叉树的每个节点,同层节点从左至右打印。

//第一种做法 public class Solution { public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) { ArrayList <Integer> li=new ArrayList<Integer>(); ArrayList <TreeN......

南桥北木
52分钟前
1
0
linux 服务管理 Crontba、Ntpdate、Logrotate、Supervisor

crond linux 系统则是由 cron (crond) 这个系统服务来控制的。Linux 系统上面原本就有非常多的计划性工作,因此这个系统服务是默认启动的。 另外, 由于使用者自己也可以设置计划任务,所以,...

狼王黄师傅
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部