Perl:perl编程要注意的问题。

这里归纳一下用perl语言编程需要注意的问题。

1. 由于哈希值是没有先后次序的,所以哈希函数返回的值都是经过sort的,而非哈希赋值时的状态。例如:

my %hash2=( ‘ten‘ => 10, ‘fiirt‘ => 1, ‘second‘ => 2, ‘third‘ => 3, ‘fouth‘ => 4);
print keys %hash2;

---result-----
fiirtsecondthirdfouthten

使用哈希函数each,获得结果也是经过sort的,例如:

my %hash2=( ‘ten‘ => 10, ‘fiirt‘ => 1, ‘second‘ => 2, ‘third‘ => 3, ‘fouth‘ => 4);

while (my ($key, $value) = each %hash2) {
    print "$key => $value\n";
}

-----result------
fiirt => 1
second => 2
third => 3
fouth => 4
ten => 10

2. Perl变量、数组变量、哈希变量没有定义和undef的区别。如果没有用my(strict的要求),则不能使用。只有定义了,但没有赋值,其值才为undef。例如在一下例子运行错误。

if (%dfd) { print ‘ok‘;} else { print ‘not ok‘;}

3. 把未定义值当成数字使用时,Perl会自动将它转换成0。如果使用use warnings;use strict。虽然程序会报错,虽然依旧会出结果。

print 12*$a;

------result-------
Name "main::a" used only once: possible typo at ts2.pl line 19.
Use of uninitialized value $a in multiplication (*) at ts2.pl line 19.
0[nan@localhost pl]$ fg

4.<>在读取文件的时候,在最后一行读完后,会返回undef值,其目的是为了结束循环之用。例如:

open FILE, "<tt.pl" or die "the file tt.pl can not be opened $!";
while(<FILE>) {
  print;
}

但是,在<STDIN>从键盘读取数据的时候,如果使用while循环,则无法跳出循环,所以最好设置一个跳出循环的特殊字符。例如:

while (<>) {
  last if (/^EOF$/);
  print;
}
时间: 2024-10-01 02:04:58

Perl:perl编程要注意的问题。的相关文章

perl简洁编程,《Perl语言入门(第五版)》读书笔记

整理一下好多年前放在hi.baidu上的笔记! perl简洁编程,<Perl语言入门(第五版)>读书笔记20110316! 书很早就买了,简单翻翻就扔下了!最近买了ipad,良好的阅读体验,用来看书,感觉书又能看进去了!不能白看一遍,整理一下阅读笔记! Perl的程序竟能如此简洁!!! sub division  {     $_[0]/$_[1]; } $_即为接收的数组,同时数据运算后,直接返回,省略了return. sub max {    my($max_so_far)  =  shi

perl Unicode编程

在perl语言中,字符串只有两种形式: (1)字节流字符串:不管字符串是何种内容.何种编码,都解析为单字节的字节串. (2)字符流字符串:按照UTF8编码方案,从左到右把字节流解析为连续的字符流. perl如何确定一个字符串是字节流字符串还是采用UTF8编码的字符流字符串呢? 在Perl内部,每个字符串都有一个UTF8编码标志,这个标志有两个状态:on或者off.如果标志为on,就是字符流字符串,反之就是字节流字符串.默认情况下,perl语言字符串的编码标识都是off状态,即字符串都是以字节流字

Perl CGI编程

http://www.runoob.com/perl/perl-cgi-programming.html 什么是CGI CGI 目前由NCSA维护,NCSA定义CGI如下: CGI(Common Gateway Interface),通用网关接口,它是一段程序,运行在服务器上如:HTTP服务器,提供同客户端HTML页面的接口. 网页浏览 为了更好的了解CGI是如何工作的,我们可以从在网页上点击一个链接或URL的流程: 1.使用你的浏览器访问URL并连接到HTTP web 服务器. 2.Web服务

perl网络编程小记(-)

当perl脚本开始执行时,默认地打开3个文件句柄:STDOUT,STDIN,STDERR STDOUT(standard outpu)是默认的输出文件句柄.发送给这个文件句柄的 数据在用户指定的输出设备上显示,通常是脚本运行的命令窗口. STDIN(standard input)是默认输入的文件句柄,从这句柄读取的数据取自 用户选择输入设备,通常是键盘. STDERR(即,standard error)用于错误消息,诊断,调式和其他类似的偶发输出. $line = <>; #一次读一行 @li

Perl语言编程&gt;&gt;学习笔记

1. 使用反引号可以调用外部程序并返回程序的输出, 如  $cwd = `pwd`; 2. Perl 中的变量类型之间的区别主要是单数和复数; 单数变量称为标量 $scalar , 复数变量称为数组 @array .   Perl中还有 Hash, Handle, typeglob 和引用 等一些变量类型.  Perl中的标量可以使用 = 赋值, 可以指向其他变量或对象等等复杂数据结构的引用. 3.Perl中的引用 $ary = \@myarray; # 引用一个命名数组 $hsh = \%my

perl socket编程

soket是网络套接字,它是ip地址和端口号的组合.在perl中使用套接字需要SOCKET模块:以经过测试可以使用:下面使用如下的例子进行说明: 服务器端: #!/usr/bin/perl -w use Socket; use IO::Handle; socket(SOCK,AF_INET,SOCK_STREAM,getprotobyname("tcp"));#初始化socket setsockopt(SOCK,SOL_SOCKET,SO_REUSEADDR,1); my $addr=

Perl面向对象编程

Perl class is a Perl package 首先,创建一个名为Cocoa.pm的包文件(扩展名pm是包的缺省扩展名,意为PerlModule).一个模块就是一个包,一个包就是一个类.在做其它事之前,先加入"1;"这样一行,当你增加其它行时,记住保留"1;"为最后一行.这是Perl包的必需条件,否则该包就不会被Perl处理. 其次,我们往包里添加方法使之成为一个类.第一个需添加的方法是new(),它是创建对象时必须被调用的,new()方法是对象的构造函数

重读了Perl高效编程

再次阅读,发现一些之前忽略掉的内容: 1. 关于引用作为参数传递,例如: bar(\@bletch); sub bar{ my @arr = @{shift} } 但是这样,shift只是一个变量名称而不是内建函数.如果想要变成内建函数,必须按照下面的方法添加点什么: my @arr = @{shift()} 或者占位符: my @arr = @{+shift} 2. select 和write的默认操作对象是当前文件句柄. shift和pop的默认操作对象是:子程序内为@_,子程序外为@ARG

perl 字符集处理

本文内容适用于perl 5.8及其以上版本. perl internal form 在 Perl看来, 字符串只有两种形式. 一种是octets, 即8位序列, 也就是我们通常说的字节数组. 另一种utf8编码的字符串, perl管它叫string. 也就是说: Perl只认识两种编码: Ascii(octets)和utf8(string). utf8 flag 那 么perl如何确定一个字符串是octets还是utf8编码的字符串呢? perl可没有什么智能, 他完全是靠字符串上的utf8 f