Perl Learning (2) —— 标量数据

2011-01-15 wcdj

(1) 标量(scalar)
(2) 数字
(3) 整数直接量
(4) 非十进制的整数直接量
(5) 数字操作符
(6) 字符串
(7) 区别:单引号内的字符串直接量和双引号内的字符串直接量
(8) 字符串操作符
(9) 数字与字符串之间的自动转换
(10) Perl内建警告信息
(11) 标量变量
(12) 用print输出结果
(13) 字符串中的标量变量内插——花括号
(14) 比较操作符
(15) if控制结构
(16) 布尔值
(17) 获取用户输入
(18) chomp操作符
(19) undef值
(20) defined函数

(1) 标量(scalar)
一般来说,Perl用标量(scalar)来称呼单件事物。标量是Perl里面最简单的一种数据类型。
对大部分的标量来说,要么是数字,要么是由字符组成的串。
数字和字符串在Perl里,在大多数情况下是可以在内部转换的。

(2) 数字
所有数字在内部格式都相同。
在Perl内部,总是按“双精度浮点数”的要求来保存并进行运算。也就是说,Perl内部并不存在整数值——程序中用到的整型常量会被转换成等效的浮点数值。

(3) 整数直接量
123456789123456789
这个数字读起来比较费劲。Perl允许你在整数直接量里插入下划线,将若干个位数分开。这两种写法都表示同一个数字,只是看起来有些不一样而已。
#! /usr/bin/perl

@a=123456789123456789;
print "@a/n";
@b=123456789_123456789;
print "@b";

(4) 非十进制的整数直接量
Perl允许使用十进制(decimal)以外的其他进制来表示数字。
八进制(octal)直接量:以0开头。
十六进制(hexadecimal)直接量:以0x开头。
二进制(binary)直接量:以0b开头。
例如:
0377            # 八进制的377,等于十进制的255
0xFF            # 十六进制的FF,也等于十进制的255
0b11111111        # 也等于十进制的255
虽然这三个数字看起来并不相同,但对Perl而言它们都是同一个数字。
当数字较长时,可以在直接量中使用下划线将数字分开,这样便于阅读。

(5) 数字操作符
加减乘除:+, -, *, /
取模(先取整再求余):%
乘幂:**   (例如,2**3代表2的3次方,得8)

(6) 字符串
注意:空字符NULL在Perl里并没有特殊的意义,Perl会另行记住字符串的长度,而不是用空字符来表示字符串的结尾。
最短的字符串:是不含任何字符的空字符串。
最长的字符串:其长度没有限制,它甚至可以填满所有内存。Perl尽可能遵循“无内置限制(no built-in limits)的原则”。
和数字一样,字符串也有直接量,也就是Perl程序中的字符串书写方式。
字符串直接量有两种不同的形式:[1]单引号内的字符串 [2]双引号内的字符串

(7) 区别:单引号内的字符串直接量和双引号内的字符串直接量
#! /usr/bin/perl

@a=123456789123456789;
print '@a/n'; # 输出:@a/n
@b=123456789_123456789;
print "@b/n"; # 输出:123456789123456789和一个换行

变量内插:这是双引号内字符串的一种特性,是指在使用字符串时,将字符串内的变量名称替换成该变量当前的值。

(8) 字符串操作符
字符串拼接操作符:"."
字符串重复操作符:"x"

(9) 数字与字符串之间的自动转换
通常Perl会根据需要,自动在数字和字符串之间进行类型转换。
是需要数字还是字符串?这完全取决于操作符需要什么类型的操作数。
完全不含数字的字符串会被转换成零。
例如:
@a="12fred34" * "3" ;
print "@a/n"; # 输出36

(10) Perl内建警告信息
要启用警告功能,请在命令行运行程序时使用-w选项。
$ perl -w my_program
或者,如果想要每次运行都启用警告功能,可使用#!行来指明。
#! /usr/bin/perl -w
在Perl 5.6或者更高的版本中,还可以通过启用warnings这个编译命令来打开警告功能。
#! /usr/bin/perl
use warnings;
如果看不懂某个警告信息,可以利用diagnostics这个编译命令看更详细的问题描述。perldiag在线手册里列出了所有的简要警告信息和详细诊断说明。
#! /usr/bin/perl
use diagnostics;
在把use diagnostics这个编译命令加进程序之后,你可能会觉得程序在启动的时候或多或少有点慢。那时因为,你的程序正在忙着加载(到内存)警告和详细说明,那么稍后万一有错误或是警告发生,你就可以马上看到这些相关的错误信息。
注意:为了方便,可以仅在需要加载diagnostics编译命令时,通过Perl的命令行选项-M来实现。
$ perl -M diagnostics ./my_program

(11) 标量变量
在Perl里,标量变量名之前总有$符号。(在Perl的术语里面,这种符号叫做”印记“(sigil))
在shell脚本中,变量命名也要用$,但赋值时则不能用$。
在awk和C里,则完全用不到$。
如果你需要使用不同的程序语言,那么难免会搅和在一起,这并不奇怪。

(12) 用print输出结果
print "hello world/n"; # 输出hello world,后面接着换行符
print "The answer is ", 6*7, "/n";# 输出The answer is 42和一个换行符 (print后面是一个列表(list))

(13) 字符串中的标量变量内插——花括号
$FirstName = "Gerry"
print "My name is ${FirstName}Yang"# 输出My name is GerryYang

(14) 比较操作符
数值与字符串的比较操作符
数值:==,!=,<,>,<=,>=
字符串:eq,ne,lt,gt,le,ge
less than, greater than

(15) if控制结构
注意:程序块一定要加上表示块界限的花括号。(这点和C语言不同)

(16) 布尔值
和其他语言不同,Perl并没有专用的”布尔“(Boolean)数据类型,它是靠一些简单的规则来判断的:
[1] 如果值为数字,0为假;所有其他数字都为真。
[2] 如果值为字符串,空字符串为假;所有其他字符串都为真。
[3] 如果不是数字也不是字符串,就先转换成数字或字符串再进行判断。
注意:字符串'0'是唯一被当成假的非空字符串。

(17) 获取用户输入
使用”行输入“操作符<STDIN>读取从键盘的输入。
$line = <STDIN>;
if ($line eq "/n") {
    print "That was just a blank line!/n";
} else {
    print "That line of input was: $line";
}

(18) chomp操作符
[1] 只能用在一个变量上。
[2] 该变量的内容必须为字符串。
如果此字符串的结尾是换行符,chomp能将它移除。
$text = "a line of text/n";    # 假设是从<STDIN>读进来的
chomp($text);        #  去除行末的换行符
注意:chomp本质上是函数,返回值是实际移除的字符数。使用chomp时,可以加上括号,也可以不加。如果字符串后面有两个以上的换行符,chomp也仅仅删除一个。如果结尾处没有换行符,它什么也不做,直接返回零。

(19) undef值
在首次被赋值前,变量的初始值就是特殊的undef(未定义)。
它在Perl里的意思只不过是:这里空无一物——走开、走开。
undef作为数字时,会被视为0;undef作为字符串时,会被视为空字符串。
但是,undef既不是数字也不是字符串,它完全是另一种类型的标量值。

(20) defined函数
要判断某个字符串是undef而不是空字符串,可以是使用defined函数。
如果是undef,该函数返回假,否者返回真。

$name = <STDIN>;
if (defined($name)) {
    print "The input was $name";
} else {
    print "No input available!/n";
}
注意:Typing an end-of-file character, Control-D on Unix and Control-Z on Windows.

你可能感兴趣的:(perl,input,语言,character,Diagnostics,Warnings)