如果标量还没有赋任何值,可以给标量赋默认值。这里的技术依赖以下事实:未初始化的标量被设置为未定义量,对它可以使用defined函数测试。这段代码使用条件运算符?:,给$variable变量赋默认值,如果$variable并未被赋值,这个值存储在$defaultvalue变量中:
$defaultvalue=1;int函数仅仅去掉一个数字的非整数部分而返回剩余部分,这意味着他对1.999999和1.00001都是返回1.用sprintf函数将数圆整到特定的十进制位数。perl分配内存空间来适合字符串的长度。perl内部使用unicode来存储它的字符数据。Perl连接运算符是点(.)perl可以通过使用单引号或双引号来创建字符串值作为标量:
$variable=defined($variable)?$variable:$defaultvalue;
print $variable;
$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";在某些情况下,裸词可能会与标号或文件句柄弄混了,这些情况下都不需要使用$这样的前缀。这种情况下,可以关掉perl对裸词的支持,这会使perl对任何不能解释为子程序名的裸词提出警告:use strict "subs";
print $hash{"name"};
q// ' ' 否 文字qq结构处理字符串中的双引号;
qq// " " 是 文字
qx// `` 是 命令
qw// () 否 单词表
// m// 是 模式匹配
s/// s/// 是 替换
y/// tr/// 否 翻译
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];PS:可以使用[]来索引由函数返回的表,仅需一个标量返回值而非表时,这提供了处理表函数的简单方法。
print $variable;
经典的例子就是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——已分配的实际数量