设为首页 收藏本站
查看: 990|回复: 0

[经验分享] Perl语言学习笔记(二) 标量数据

[复制链接]

尚未签到

发表于 2015-12-26 11:55:30 | 显示全部楼层 |阅读模式
  
第二章 标量数据
  
  标量(Scalar):单件事物,数字或字符组成的串
  
  所有数字的内部格式都相同:总是按照“双精度浮点数”的要求来保存并进行运算。即,Perl中不存在整数值。
  
  浮点数直接量 :没什么好说的
  
  整数直接量:可以用下划线将若干位数分开,如61298040283768可以写成61_298_040_283_768
  
  非十进制度整数直接量:0377八进制,0xFF十六进制,0b11111111二进制。0x1377_0B77。前置零的表示法只对直接量有效,但不能在字符串自动转换成数字时使用。
  
  数字操作符:取模操作符%先取整后再求余,10.5  % 3.2 和 10 % 3的计算结果相同。取模对负数的处理不同版本不一样。乘幂操作符以双星号表示,2 ** 3 = 8。
  
  字符串:字符串能够包含任何字符,所以可用它来对二进制数据进行创建、扫描于操作,读入一个图形文件或可执行文件到Perl的字符串变量里,改变它的内容,再写回去。有两种字符串直接量。
  
  单引号内的字符串直接量:单引号内所有字符都代表它们自己(包括换行符)。要表示反斜线和单引号本身,需要在前面加一个反斜线。
  'hello\n'# hello 后面接着反斜线和n
  'hello
  there'# hello、换行符、there(总共11个字符)
  '\'\\'# 单引号,紧接着反斜线
  要注意的是,单引号内的\n并不代表换行字符,而是表示反斜线和n这两个字符。只有在后面是另一个反斜线或单引号时,前面的反斜线才有特殊的意义。
  
  双引号内的字符串直接量:跟其他语言里的字符串没什么两样,不过变量内插是个什么东西?
  
  字符串操作符:
  用“.”操作符连接字符串(必须显式使用): 'hello wrold' . "\n" # 等同于"hello world\n"
  字符串重复操作符(小写字母x): "fred" x 3# "fredfredfred"
      5 x 4 # "5555" 5先被转换成单字符的串"5"
       右操作数在使用前会先取整,复制次数小于1时,会生成长度为零度空字符串
  
  数字与字符串之间的自动转换:
  自动转换取决于操作符需要什么类型的操作数。字符串转换成数字时会转换成等效的十进制浮点数。前置零的技巧只对直接量有效,不能用在字符串的自动转换上。用hex()或oct()来转换字符串。"12" * "3" 结果是36,字符串中非数字的部分以及前置度空白符号会被略过。"12fred34" * "3"结果也是36。完全不含数字的字符串被转换成零。"Z" . 5 * 7   # 等同于"Z35"。
  
  Perl内建警告信息:
  运行程序时使用-w选项启用警告功能:$ perl -w my_program
  使用#!指名每次运行都启用警告功能:#!/usr/bin/perl -w
  在Perl 5.6及更高版本,启用warnings编译命令打开警告功能:
      #!/usr/bin/perl
       use warnings;
  启用diagnostics编译命令查看更详细的问题描述:
      #!/usr/bin/perl
       use diagnostics;
  启用diagnostics编译命令后,程序启动时会加载警告和详细说明到内存中,影响程序速度。所以可通过命令行选项-M仅在需要时再加载diagnostics编译命令:$ perl -Mdiagnostics ./my_program
  
  标量变量: 以美元符号($)开头,后跟Perl标识符,区分大小写。
  
  慎选变量名称: :-)
  
  标量的赋值: 就用等号吧
  
  双目赋值操作符: o(∩∩)o...哈哈
  
  用print输出结果: 可以用print输出一系列用逗号隔开的值。
  print "The answer is ", 6 * 7, ".\n";
  这实际上是一个列表(list),列表是什么?
  
  字符串中的标量变量内插:
  双引号圈内的字符串直接量能进行变量内插。就是说,字符串内的所有标量变量名,都会被替换为该变量的当前值。
  $meal = "brontosaurus steak";
  $barney = "fred ate a $meal";# $barney现在是"fred ate a brontosaurus steak"
  $barney = "fred ate a " . $meal;# 另一种等效的写法,表明不用双引号也可以达成相同效果
  没有被赋值过的标量变量会用空字符串来代替。
  如果要打印的就是这个变量,则不必使用变量内插方式
    print "$fred";# 双引号是多余的
    print $fred;# 这样写比较好
  变量内插也称双引号内插,因为它只会在双引号(而非单引号)里起作用。
  如果要将美元符号本身放进双引号内的字符串,可以在它前面用反斜线转义。
  $fred = 'hello';
  print "The name is \$fred.\n";# 会输出$符号
  print 'The name is $fred' . "\n";# 单引号,这样也行
  进行内插时,Perl会尽可能使用最长且合法的变量名称。要是你想在内插值的后面,紧接着输出字母、数字或下划线,可能会碰上麻烦:当Perl检查变量名称时,它会违背你的本意,将后面的字符当作变量名称的一部分。解决办法很简单,和shell脚本一样,Perl里面我们可以用一对花括号将变量名围起来,以避免歧义。要不然,可以先把字符串拆成两半,再利用连接操作符接起来:
  $what = "brontosaurus steak";
  $n = 3;
  print "fred ate $n $whats.\n";          # 不是steaks,而是$whats的值
  print "fred ate $n ${what}s.\n";        # 现在是用$what了
  print "fred ate $n $what" . "s.\n";       # 另一种写法,比较麻烦
  print 'fred ate ' . $n . ' ' . $what . "s.\n";     # 写起来特别麻烦
  另外还有一些可能会出问题的字符。在标量变量名称的后面,如果需要接上左方括号(是不是还有另一个符号?书上貌似有印刷错误),请在括号前面加上反斜线。要是变量名称后面的接的是单引号或两个冒号,也需要用同样的方式处理。也可以用上述方法中提到的花括号表示法来代替。
  
  操作符的优先级与结合性:
  4 ** 3 ** 2# 4 ** (3 ** 2),得4 ** 9 (向右结合)
  72 / 12 /3 # (72 / 12) / 3,得6/3,得2 (向左结合)
  因为**是向右结合的,所以隐含的括号便放在右边。而/是向左结合的,因此隐含的括号便放在左边。
  
  比较操作符:
      ==, !=, <,  >, <=, >=
  eq ne lt gt le ge
  35 != 30 + 5# 假
  '35' eq '35.0'    # 假 (当成字符串来比较)
  ' ' gt ' '# 真
  'fred' lt 'free'        # 真
  
  if控制结构:
  if ($name gt 'fred') {
  print "'$name' comes after 'fred' in sorted order.\n";
  } else {
  print "'$name' does not come after 'fred'.\n";
  }
  可选的程序块周围一定要加上表示块界限的花括号。
  
  布尔值:
  任何标量值都可以成为if控制结构里的判断条件。
  Perl没有专用的布尔值。
  数字0为假,其他数字为真。
  空字符串('')为假,其他字符串为真。
  如果不是数字也不是字符串,先转换成数字或字符串再进行判断。
  字符串'0'跟数字是同一个标量,字符串'0'是唯一被当成假的非空字符串。
  
  获取用户输入:
  只要在程序代码中能使用标量值的位置写上行数入操作符<STDIN>,Perl就会从标准输入读进一行文字,直到换行符为止。<STDIN>返回的字符串,一般在最后都会跟有一个换行符。
  
  chomp操作符:
  作用于一个内容为字符串的变量上,移除此字符串结尾的一个换行符(如果有,不论有几个)。
  在Perl程序里,任何需要变量的地方都可以用赋值运算来替代。首先,Perl执行赋值操作,然后按你想要的任意一种方式使用变量。chomp常见用法:chomp($text = <STDIN>);  #读入文字,略过最后的换行符。
  chomp返回值是实际移除的字符数。
  使用chomp时可以不加括号,这是Perl的一项惯例:除非去掉括号会改变表达式的意义,否则括号用不用都可以。
  
  while控制结构:
  $count = 0;
  while ($count < 10) {
  $count += 2;
  }
  花括号必不可少!
  
  undef值:
  标量变量在首次被赋值之前,其初始值就是undef。undef作为数字,它会假设这是0,如果是字符串,它会假设这是空字符串。但是undef不是数字也不是字符串,它是另一种类型的标量值。
  
  defined函数:
  使用defined判读某个字符串是undef而不是空字符串。如果是undef,该函数返回假,否则返回真。defined($madonna)
  如果想自己创建undef值,可以直接使用同名的undef操作符:
  $madonna = undef;
  
  
  There is more than one way to do it!
  
  
  
  
  
  
  
  
  
  
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-156524-1-1.html 上篇帖子: 对linux下perl backdoor的一段分析 下篇帖子: Perl:关于标准输出STDOUT和标准错误STDERR
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表