加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Perl笔记:01、变量

发布时间:2020-12-16 00:07:33 所属栏目:大数据 来源:网络整理
导读:字符型变量和数值型变量 数值型变量可以直接用 3*8 ,7+9的方式来书写 字符型变量的连接可以使用点(.)操作符,如 "abcd"."xxxx"等同于"abcdxxxx" 字符型变量可以内嵌到其他的字符型变量中,但要求的字符串必须用双引号来括起的形式,单引号的不能够内嵌 如

字符型变量和数值型变量

数值型变量可以直接用 3*8 ,7+9的方式来书写

字符型变量的连接可以使用点(.)操作符,如 "abcd"."xxxx"等同于"abcdxxxx"

字符型变量可以内嵌到其他的字符型变量中,但要求的字符串必须用双引号来括起的形式,单引号的不能够内嵌
如 :
$ZYQ="ZhouYueQiu"
$NAME="my name is $ZYQ"

注意:如果$ZYQ没有赋值,那么将用空来代替

if控制结构

一旦能比较两个值时,就希望能根据这些比较结果作判断。和别的语言类似,Perl中也提供了 if控制结构:

if ( $name gt 'fred' )
{
print "'$name' comes after 'fred' in sorted order.n" ;
}

如果需要另一种选择,可以使用关键字else:

if ( $name gt 'fred' )
{
print "'$name' comes after 'fred' in sorted order.n" ;
} else
{
print "'$name' does not come after 'fred'.n" ;
print " Maybe it's the same string,in fact.n" ;
}

Boolean 值

在if控制结构的条件判断部分可以使用任意的标量值。这在某些时候将很方便,如:

$is_bigger = $name gt 'fred' ;
if ( $is_bigger )
{
do something
}

那么,Perl 是怎么判断其值得true 或 false呢?Perl不同于其它的一些语言, 它没有Boolean 类型。它利用如下几条规则
●数字0 是false;其余为真
●如果值为字符串,则空串('')为false;其余为真
●如果值的类型既不是数字又不是字符串,则将其转换为数字或字符串后再利用上述规则

用户输入

现在,可能想你的 Perl 程序怎样才能从键盘上得到输入呢?有一种简单方法:使用行输入操作符(line-input operator),
<STDIN>
◆是行输入运算符对文件句柄STDIN的操作。但直到第五章才介绍文件句柄。
<STDIN>作为标量值来使用的,Perl 每次从标准输入中读入文本的下一行,将其传给<STDIN>。标准输入可以有很多种;
默认的是键盘。如果还没有值输入<STDIN>,Perl 会停下来等你输入一些字符,由换行符结束(return)。
◆坦白讲,是你的系统等待输入,Perl等待你的系统。具体的细节与机器和配置有关。由于是系统而非 Perl 控制你的输入,因此要更正错误的输入通常可以在按下回车前使用退格键(backspace) 。如果想更多的控制输入,可以使用 Term::ReadLine 这个模块

<STDIN>中的字符串通常由一个换行符作为结尾。因此,可以如下操作:
◆例外的情况是,标准输入流在行中间就结束了。当然,普通的文本文件通常不是这样。
例1-1

#!/usr/bin/perl

print "please input you name:" ;
$NAME = <STDIN> ;

if ( $NAME eq "" )
{
print "please input your name!" ;
}
else
{
print "you name is :$NAME" ;
}

chomp函数

chomp函数,可以去掉变量中最后的换行符

如下例:
$text="a line of textn" ; #也可以由<STDIN>输入
chomp($text); #去掉换行符(n)。

这是将字符串末尾换行符去掉的最好方法。
基于 Perl 中的一条基本原则:在需要使用变量的地方,可以使用赋值表达式来代替。
我们有更简单的使用 chomp的方法。Perl 首先做赋值运算,再使用这个变量。因此
使用chomp的最常用方法是:
chomp ($text = <STDIN>); #读入,但不含换行符

$text = <STDIN>;
chomp ($text); #同上,但用两步完成

chomp是一个函数。作为一个函数,它有一个返回值,为移除的字符的个数。这个数字基本上没什么用:
$food=<STDIN>;
$betty=chomp $food; #得到值1
如上,在使用 chomp 时,可以使用或不使用括号() 。这又是 Perl 中的一条通用规则:除非移除它们时含义会变,否则括号是可以省略的。

while控制结构

和许多的程序语言一样,Perl 也提供了循环结构。while语句可以循环执行其内部的一块代码直到其条件非真:

$count = 0 ;
while ( $count < 10 ) {
$count + = 2 ;
print "count is now $countn" ; #打印出 2 4 6 8 10
}

条件中真假值的判断和if结构中是一样的。和if控制结构相同,花括号是必须的。判断条件在迭代前执行,如果条件为假,
则一次也不执行。

undef值

如果没有定义就是用这个变量的话,这个变量中的值就称之为undef。如果当成数字的话其值为0,当成字符串使用的话它表示空字符串。但它及不是数字也不是字符串,它完全是另一种类型的标量值。
既然undef作为数字时会被视为0,我们可以很容易的构造一个数值累加器,如下例子:
例1-2

#!/usr/bin/perl -w
while ( $n < 10 )
{
$n += 1 ;
print "$nt" ;
}
print "n"

输出结果
Use of uninitialized value in numeric lt (<) at undef.pl line 2.
1 2 3 4 5 6 7 8 9 10

这里我使用了-w参数因此输出了一行警告信息

同样undef也可以作为一个字符串的累加器,如下:
$string.="more textn";

defined函数

"行输入"操作符 <STDIN> 在读到文件末尾时会返回undef。那么如何判断一个变量是undef还是空字符串呢?使用defined函数就可以搞定这个疑虑,如果是undef返回假,否则返回真。如下例子:
例1-3

#!/usr/bin/perl -w

$madonna = <STDIN> ;

if ( defined ( $madonna ) )
{
print "the input is $madonnan" ;
}
else
{
print "No input available!n" ;
}

如果想尝试undef值,可以直接使用undef操作符,或者不进行任何的定义即可。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读