2006年06月21日

这是最好的年代,这是最坏的年代,有人犹在地狱,有人宛如天堂

                                                                                                               –狄更斯

  在韦德一次次摔倒又站起来的时候,在莫宁拖着换肾的身体努力着想帽每一个从对手手里投出来的球的时候,在奥尼尔一次次无奈的站在罚球线,又无奈的看着球偏离篮筐的时候…总冠军来了.帕特莱利老泪纵横,也许他想的是重新作为教练拿到总冠军的不容易,莫宁,佩顿,沃克,jw终于可以如愿了,这座总冠军将使他们的篮球生涯没有遗憾.奥尼尔实现了他的诺言,为迈阿密带来了总冠军,也向世人证明了自己,离开kobe,他还是联盟中最有统治力的球员.
wade,这个赛季对他来说是完美的,  他用自己的行动证明了自己,wade式摔倒成为了他的招牌动作,另他更像一个真正的男人,真正的斗士.小牛队的表现接近完美,Nowitzki的表现,小将军的表现可圈可点,但我总觉得在总决赛中帕特莱利更胜小将军一招.
 新的总冠军,新的领军人物将给下个赛季的NBA带来更多看点,当然商家也从今年的季后赛和总决赛得到了.Wade的成功必然会带动NIKE旗下Converse的发展,他脚上那双黑白的母亲节pe,场场亮相,给人印象极深.两队的一哥都是身着NIKE旗下的产品(Nowitzki脚上的是nike maxastonish),相比之下随着邓肯,加内特,T-mac等人的出局,adidas今年在nba季后赛的表现不是很令人满意.

2006年06月06日

由于我个人的粗心,导致运营服务器报表进程僵死,对公司和客户造成了不良的影响,我对此表示道歉和检讨。
从觉察这个失误起,我已经深深认识到自己的错误,同时直至现在我仍处在无尽的自责和竭虑中,在这种对自我神经严重伤害的精神暴力下,我错了。作为一个老员工,作为一个新生公司的老员工,我实在不应该犯这种让人嗤之以鼻的错误。通过对这个错误的认识,我了解到了一直在我内心深处的罪恶思想,我太粗心了,在这种错误思想奴役下的灵魂也是错误的。长期以来,“智者千虑必有一失”的思想在我脑海里犹如毒瘤,根深蒂固,它慢慢的生长,悄悄的扩散。让我在工作上失误,对公司造成了不良影响。啜泣,忏悔已经没有用了,在无情的事实下,我无知的过失已经犯下。我只能做一名补牢者,一名快意写痛的补牢者,用我以后至清至查的工作,弥补我的过失,前车之覆,后车之鉴,所以,我在祈求得到公司领导原谅的同时,将对自己在工作上的惯有思想进行颠覆和重新认知,向工作中一切无知和悸动的行为永远的告别,全力以赴将错误思想彻底泯灭,微笑着走向同样微笑着的明天。

2006年05月16日

wade在playoff的战靴,配上紧身裤,coooooool!!!!仔细看他的sneaker,他的母亲叫josie…..maybe

接近夏天了,这双鞋的配色注定会成为经典,所以毫不犹豫的买下

2006年05月09日

TAG:CCNA 网络技术



回答:loopback具体作用是什么?怎么用?

loopback具体作用是什么?怎么用?
此类接口是应用最为广泛的一种虚接口,几乎在每台路由器上都会使用。常
见于如下用途。
1 作为一台路由器的管理地址
系统管理员完成网络规划之后,为了方便管理,会为每一台路由器创建一个
loopback 接口,并在该接口上单独指定一个IP 地址作为管理地址,管理员会
使用该地址对路由器远程登录(telnet ),该地址实际上起到了类似设备名称
一类的功能。
但是通常每台路由器上存在众多接口和地址,为何不从当中随便挑选一个呢?
原因如下:由于telnet 命令使用TCP 报文,会存在如下情况:路由器的某一个
接口由于故障down 掉了,但是其他的接口却仍旧可以telnet ,也就是说,到
达这台路由器的TCP 连接依旧存在。所以选择的telnet 地址必须是永远也不会
down 掉的,而虚接口恰好满足此类要求。由于此类接口没有与对端互联互通
的需求,所以为了节约地址资源,loopback 接口的地址通常指定为32 位掩码。
2 使用该接口地址作为动态路由协议OSPF 、BGP 的router id
动态路由协议OSPF 、BGP 在运行过程中需要为该协议指定一个Router id ,作
为此路由器的唯一标识,并要求在整个自治系统内唯一。由于router id 是一个
32 位的无符号整数,这一点与IP 地址十分相像。而且IP 地址是不会出现重复
现象的,所以通常将路由器的router id 指定为与该设备上的某个接口的地址相
同。由于loopback 接口的IP 地址通常被视为路由器的标识,所以也就成了
router id 的最佳选择。
3、使用该接口地址作为BGP 建立TCP 连接的源地址
在BGP 协议中,两个运行BGP 的路由器之间建立邻居关系是通过TCP 建立连
接完成的。
在配置邻居时通常指定loopback 接口为建立TCP 连接的源地址(通常只用于
IBGP ,原因同2.1 ,都是为了增强TCP 连接的健壮性)
配置命令如下:
router id 61.235.66.1
interface loopback 0
ip address 61.235.66.1 255.255.255.255
router bgp 100
neighbor 61.235.66.7 remote-as 200
neighbor 61.235.66.7 update-source LoopBack0

2006年04月27日

用自动wget或ftp提高工作效率

									2004-06 余枫

2004-06学会用wget工具来取FTP站点的文件.

wget ftp://username:password@ip_address/dir/file_name

比自动FTP的SHELL脚本的方法方便多了.

例如获取FTP服务器上文件名是昨天日期的文件,如filename_20040608_001,filename_20040608_002,......

#!/bin/sh
rq=`date --date '1 days ago' "+%Y%m%d"`
wget -q ftp://username:password@ip_address/filename_$rq*

有的时候,FTP站点用wget可以进行目录浏览,也可以下载固定文件名的文件,
却不能把文件名是昨天日期的文件取下来时.

我想了一个方法:

#!/bin/sh
rq=`date --date '1 days ago' "+%Y%m%d"`
wget -nr ftp://username:password@ip_address/filename_$rq*
grep filename_$rq .listing > 1.txt
cat 1.txt|while read LINE
do
file_name=`echo $LINE|awk '{print $9}'`
wget -q ftp://username:password@ip_address/$file_name
done

原理是在目录浏览.listing文件里查找到昨天生成的文件名到临时文件1.txt里

-rw-r--r-- 1 fengyu fengyu 106880 Jun 9 11:44 file_name_20040608001
-rw-r--r-- 1 fengyu fengyu 161760 Jun 9 11:44 file_name_20040608002
...... ...... ......

从头到尾一行行读这个1.txt文件,取它的第9段,也就是固定的文件名,再传递给wget工具.

如果FTP站点或者URL地址里面有特殊的符号,如@和&, 需要用ASC 码替换成%40和%26

更详细替换的方法请参考:www.gnu.org


-------------------------------------------------------------------------------------

2003-01时候看从www.china-pub.com下载的书《LINUX与UNIX Shell编程指南》,不经意的发现有一个写成

自动FTP的SHELL脚本,结合数据库的系统管理,它有很多用途,可以提高你的工作效率。

用途1: 把数据库的逻辑备份或者其它关键的文件传到另一个地区,实现远端备份。

( 例如:从北京机房的传到上海机房。)

auto_ftp.sh 内容如下:

#!/usr/bin/sh
ftp -i -n 192.168.0.253 <<FTPIT
user username password
bin
put /oracle_backup/exp/user1.dmp.Z /bk/oracle_bak/dmp/user1.dmp.Z
put /oracle_backup/exp/user2.dmp.Z /bk/oracle_bak/dmp/user2.dmp.Z
quit
FTPIT

你可以根据实际情况修改斜体字的内容:
目标服务器的IP地址,ftp用户名和密码,put或者get传递方式,源目录文件和目标目录文件。

用途2: 使远端节点间有规律的数据库导出并导入的工作自动进行。

按时间顺序在源服务器执行exp_tables.sh,然后auto_ftp_tables.sh。

接着在目标服务器执行drop_tables.sh,最后imp_tables.sh。

如何设置时间表并自动执行,请参看 UNIX下让ORACLE定时执行*.sql文件

用途3: 把自动生成的压缩格式的报表文件传到Linux邮件服务器,由机器自动给相关人员发EMAIL。

auto_mail.sh 内容如下:

$(cat mail.txt; uuencode report1.txt report2.txt ) | mail maggiefengyu@mail.china.com

说明:mail.txt为邮件正文的内容,report1.txt.Z report2.txt.Z为邮件的两个附件,

maggiefengyu@mail.china.com为邮件的收件人。

-------------------------------------------------------------------------------------

Windows下写FTP的ftp_253.bat文件类似下面的格式:

ftp -i -n -s:"F:\yu\ftp\ftp.txt" 192.168.0.253

文件 F:\yu\ftp\ftp.txt 格式如下:

user username password
bin
put F:\dmp\user1.dmp /bk/oracle_bak/dmp/user1.dmp
put F:\dmp\user2.dmp /bk/oracle_bak/dmp/user1.dmp
quit

wget

wget是一个从网络上自动下载文件的自由工具。它支持HTTP,HTTPS和FTP协议,可以使用HTTP代理.

所谓的自动下载是指,wget可以在用户退出系统的之后在后台执行。这意味这你可以登录系统,启动一个wget下载任务,然后退出系统,wget将在后台执行直到任务完成,相对于其它大部分浏览器在下载大量数据时需要用户一直的参与,这省去了极大的麻烦。

wget可以跟踪HTML页面上的链接依次下载来创建远程服务器的本地版本,完全重建原始站点的目录结构。这又常被称作"递归下载"。在递归下载的时候,
wget遵循Robot Exclusion标准(/robots.txt).
wget可以在下载的同时,将链接转换成指向本地文件,以方便离线浏览。

wget非常稳定,它在带宽很窄的情况下和不稳定网络中有很强的适应性.如果是由于网络的原因下载失败,wget会不断的尝试,直到整个文件下载完
毕。如果是服务器打断下载过程,它会再次联到服务器上从停止的地方继续下载。这对从那些限定了链接时间的服务器上下载大文件非常有用。

wget的常见用法

wget的使用格式

Usage: wget [OPTION]... [URL]...
  • 用wget做站点镜像:
wget -r -p -np -k http://dsec.pku.edu.cn/~usr_name/
# 或者
wget -m http://dsec.pku.edu.cn/~usr_name/
  • 在不稳定的网络上下载一个部分下载的文件,以及在空闲时段下载
wget -t 0 -w 31 -c http://dsec.pku.edu.cn/BBC.avi -o down.log &
# 或者从filelist读入要下载的文件列表
wget -t 0 -w 31 -c -B ftp://dsec.pku.edu.cn/linuxsoft -i filelist.txt -o down.log &

上面的代码还可以用来在网络比较空闲的时段进行下载。我的用法是:在mozilla中将不方便当时下载的URL链接拷贝到内存中
然后粘贴到文件filelist.txt中,在晚上要出去系统前执行上面代码的第二条。

  • 使用代理下载
wget -Y on -p -k https://sourceforge.net/projects/wvware/

代理可以在环境变量或wgetrc文件中设定

# 在环境变量中设定代理
export PROXY=http://211.90.168.94:8080/
# 在~/.wgetrc中设定代理
http_proxy = http://proxy.yoyodyne.com:18023/
ftp_proxy = http://proxy.yoyodyne.com:18023/

wget各种选项分类列表

  • 启动
  -V,  --version           显示wget的版本后退出
-h, --help 打印语法帮助
-b, --background 启动后转入后台执行
-e, --execute=COMMAND 执行`.wgetrc'格式的命令,wgetrc格式参见/etc/wgetrc或~/.wgetrc
  • 记录和输入文件
  -o,  --output-file=FILE     把记录写到FILE文件中
-a, --append-output=FILE 把记录追加到FILE文件中
-d, --debug 打印调试输出
-q, --quiet 安静模式(没有输出)
-v, --verbose 冗长模式(这是缺省设置)
-nv, --non-verbose 关掉冗长模式,但不是安静模式
-i, --input-file=FILE 下载在FILE文件中出现的URLs
-F, --force-html 把输入文件当作HTML格式文件对待
-B, --base=URL 将URL作为在-F -i参数指定的文件中出现的相对链接的前缀
--sslcertfile=FILE 可选客户端证书
--sslcertkey=KEYFILE 可选客户端证书的KEYFILE
--egd-file=FILE 指定EGD socket的文件名
  • 下载
       --bind-address=ADDRESS   指定本地使用地址(主机名或IP,当本地有多个IP或名字时使用)
-t, --tries=NUMBER 设定最大尝试链接次数(0 表示无限制).
-O --output-document=FILE 把文档写到FILE文件中
-nc, --no-clobber 不要覆盖存在的文件或使用.#前缀
-c, --continue 接着下载没下载完的文件
--progress=TYPE 设定进程条标记
-N, --timestamping 不要重新下载文件除非比本地文件新
-S, --server-response 打印服务器的回应
--spider 不下载任何东西
-T, --timeout=SECONDS 设定响应超时的秒数
-w, --wait=SECONDS 两次尝试之间间隔SECONDS秒
--waitretry=SECONDS 在重新链接之间等待1...SECONDS秒
--random-wait 在下载之间等待0...2*WAIT秒
-Y, --proxy=on/off 打开或关闭代理
-Q, --quota=NUMBER 设置下载的容量限制
--limit-rate=RATE 限定下载输率
  • 目录
  -nd  --no-directories            不创建目录
-x, --force-directories 强制创建目录
-nH, --no-host-directories 不创建主机目录
-P, --directory-prefix=PREFIX 将文件保存到目录 PREFIX/...
--cut-dirs=NUMBER 忽略 NUMBER层远程目录
  • HTTP 选项
       --http-user=USER      设定HTTP用户名为 USER.
--http-passwd=PASS 设定http密码为 PASS.
-C, --cache=on/off 允许/不允许服务器端的数据缓存 (一般情况下允许).
-E, --html-extension 将所有text/html文档以.html扩展名保存
--ignore-length 忽略 `Content-Length'头域
--header=STRING 在headers中插入字符串 STRING
--proxy-user=USER 设定代理的用户名为 USER
--proxy-passwd=PASS 设定代理的密码为 PASS
--referer=URL 在HTTP请求中包含 `Referer: URL'头
-s, --save-headers 保存HTTP头到文件
-U, --user-agent=AGENT 设定代理的名称为 AGENT而不是 Wget/VERSION.
--no-http-keep-alive 关闭 HTTP活动链接 (永远链接).
--cookies=off 不使用 cookies.
--load-cookies=FILE 在开始会话前从文件 FILE中加载cookie
--save-cookies=FILE 在会话结束后将 cookies保存到 FILE文件中
  • FTP 选项
  -nr, --dont-remove-listing   不移走 `.listing'文件
-g, --glob=on/off 打开或关闭文件名的 globbing机制
--passive-ftp 使用被动传输模式 (缺省值).
--active-ftp 使用主动传输模式
--retr-symlinks 在递归的时候,将链接指向文件(而不是目录)
  • 递归下载
  -r,  --recursive          递归下载--慎用!
-l, --level=NUMBER 最大递归深度 (inf 或 0 代表无穷).
--delete-after 在现在完毕后局部删除文件
-k, --convert-links 转换非相对链接为相对链接
-K, --backup-converted 在转换文件X之前,将之备份为 X.orig
-m, --mirror 等价于 -r -N -l inf -nr.
-p, --page-requisites 下载显示HTML文件的所有图片
  • 递归下载中的包含和不包含(accept/reject)
  -A,  --accept=LIST                分号分隔的被接受扩展名的列表
-R, --reject=LIST 分号分隔的不被接受的扩展名的列表
-D, --domains=LIST 分号分隔的被接受域的列表
--exclude-domains=LIST 分号分隔的不被接受的域的列表
--follow-ftp 跟踪HTML文档中的FTP链接
--follow-tags=LIST 分号分隔的被跟踪的HTML标签的列表
-G, --ignore-tags=LIST 分号分隔的被忽略的HTML标签的列表
-H, --span-hosts 当递归时转到外部主机
-L, --relative 仅仅跟踪相对链接
-I, --include-directories=LIST 允许目录的列表
-X, --exclude-directories=LIST 不被包含目录的列表
-np, --no-parent 不要追溯到父目录

问题

在递归下载的时候,遇到目录中有中文的时候,wget创建的本地目录名会用URL编码规则处理。如"天网防火墙"会被存为"%CC%EC%CD%F8%B7%C0%BB%F0%C7%BD",这造成阅读上的极大不方便。

2006年04月26日

http://p093.ezboard.com/bniketalk

以太网端口有三种链路类型:Access、Hybrid和Trunk。Access类型的端口只能属于1个VLAN,一般用于连接计算机的端口;Trunk类型的端口可以属于多个VLAN,可以接收和发送多个VLAN的报文,一般用于交换机之间连接的端口;Hybrid类型的端口可以属于多个VLAN,可以接收和发送多个VLAN的报文,可以用于交换机之间连接,也可以用于连接用户的计算机。Hybrid端口和Trunk端口的不同之处在于Hybrid端口可以允许多个VLAN的报文发送时不打标签,而Trunk端口只允许缺省VLAN的报文发送时不打标签。


—–摘自《华为全文检索资料光盘》

TRUNK端口上存在PVID的概念,一般做完TRUNK后,端口的PVID=1,也就是说VLAN=1的报文不用封装标签可以通过,对方的PVID是多少,本端VLAN1的mac地址就送到对端多少VLAN下。如果PVID=10,那么vlan10的报文送到本TRUNK端口不答标签,送到对端,对端 PVID=20,那么本交换机VLAN10下的MAC地址就会被对端VLAN20学到。只所以说mac地址被学到是因为,vlan是工作在第三层,第三层是基于ip的,所以vlan10传给vlan20的数据,只能封装到第2层(arp),学习了mac地址。

2006年03月29日

1. 关于Perl
当你翻开这本书的时候,你也就进入了一个奇幻的世界。Perl确实是一种非常吸引人的程序语言,而之
所以这么引人入胜的原因不单单在于他的功能,也在于他写作的方式,或说成为一种程序写作的艺术。即使你只是每天埋首于程序写作的程序设计师,也不再让生活
过份单调,至少你可以尝试在程序码中多一些变化。而且许多Perl的程序设计师已经这么作了,这也是Perl的理念-「There is more
than one way to do it」。

常常遇到有人问我:「Perl到底可以拿来作甚么呢?」,不过后来我慢慢的发现,这
个问题的答案却是非常的多样化。因为在不同的领域几乎都有人在使用Perl,所以他们会给你的答案就会有很大的差异了。有人会觉得Perl拿来用在生物资
讯上真是非常方便,有人也来进行语料的处理,资料库,网页程序设计更是有着广泛的运用。当然,还有许多人把Perl拿来当成系统管理的利器,更是处理系统
日志的好帮手。

1.1 Perl的历史
由Larry
Wall创造出来的Perl在1987年时最早出现在usenet的新闻群组comp.source。从当时所释出的1.0版本,到3.0版为止,几乎维
持着一年有一次大版本的更新,也就是说在1989年时,Perl已经有了3.0
版。而1991年,Perl开发团队发展出相当关键的4.0版。因为随着4.0版的释出,Perl发表了新的版权声明,也就是Perl
Artistic
Licence(艺术家授权)。Perl4跟Perl5之间相隔了有三年之久,渐渐的,Perl的架构已经日趋稳定。一直到最近,Perl释出了新的
Perl 5.8版,并且同时进行新一代版本的开发。

1.2 Perl的概念
Perl是非常容易使用的程序语言,或者我们应该说他是方便的程序语言,你可以随手就写完一支Perl的程序,就像你在命令列中打一个指令一样 (注一)。因为Perl的诞生几乎就在于让使用者能够以更好方便的方式去撰写程序码,却不必像写C一样的考虑很多细节。
另外,Perl的黏性非常的强 (注二),你可以用Perl把不同的东西轻易的连接起来。而且你可以用Perl解决你大部份的问题,虽然有些时候你并不想这么作,但这并不表示Perl作不到。
1.3 特色

多人对Perl的印象就是一种写CGI(注三)的程序语言,或者直觉的认为Perl只是拿来处理文字的工具。不过就像我们所说的,Perl几乎可以完成大
部份你希望达成的工作。但是不可否认的,正规表示式显然是Perl足以傲人的部份,这也就是Perl大量被拿来使用作为文字处理的原因之一。
而且
Perl对于你希望快速的完成某些工作确实可以提供非常大的帮助。甚至在Unix-like的环境下,还可以直接使用Perl为基础的Shell,让你用
Perl当指令。而不必像许多程序语言,在还没正式工作之前,你必须先准备一堆事情,包括你的变数定义,你的资料结构等等。也因此,许多Unix-
like系统的管理员都喜欢拿Perl来进行系统管理。毕竟没人希望要处理一个邮件纪录档还要先花一堆时间搞清楚该怎么把纪录档内的东西转成合适的资料结
构。

1.4 使用Perl的环境
虽然大多数的Unix-like系统管理员选择Perl来帮助他们管理他们的伺服器,可是这绝对
不表示Perl只能在这些系统上执行。相反的,Perl可以在绝大多数的作业系统上执行。而目前Windows上的Perl则是以Active
Perl(http://www.activeperl.com)这家公司所提供的直译器为主。Perl的使用在不同的作业系统下会略有不同,本书则以
unix-like为执行环境。

1.5 开始使用 Perl
在开始使用Perl之前,必须先确定你的机器上是否已经安装Perl。在许多unix-like的作业系统中,都预设会安装Perl,你也可以先执行下面的指令来确定目前系统内的Perl版本。



[hcchien@Apple]% perl -v

This is perl, v5.8.2 built for darwin-2level

Copyright 1987-2003, Larry Wall

Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5 source kit.

Complete documentation for Perl, including FAQ lists, should be found on
this system using `man perl' or `perldoc perl'. If you have access to the
Internet, point your browser at http://www.perl.com/, the Perl Home Page.


我们看到在版本的部份,这里使用的是Perl 5.8.2的版本,然后有着作者Larry
Wall的名字,也就是版权拥有着。接下来是Perl的版权说明。另外,你应该要注意 `perldoc perl’
这个部份:直接在你的终端机下打这行指令,就可以看到Perl内附的文件,而且内容非常详细。
在这里,我们建议使用Perl 5.8以上的版本,如果你的版本过于老旧,或是系统中还没有安装Perl,可以从http://www.perl.com/下载,并且安装Perl。
如果你的系统已经有Perl,并且正常运作,那么你可以开始使用你的Perl。你可以试着使用所有程序语言都会使用的范例来作为使用Perl的开端:



[hcchien@Apple]% perl -e 'print "hello world!\n"'
hello world!


不过在Windows上,因为命令列不能使用单引号,所以得这样写:



[hcchien@Apple]% perl -e "print \"Hello world\n\""
hello world!


1.6 你的第一支Perl程序
事实上,你刚刚已经有了你的第一支Perl程序。当然,你可以不承认那是一支Perl程序。
不过让我们真正来写一支程序吧。如果你习惯于使用许多整合性程序开发工具,你大概会希望知道要安装甚么样的工具来写Perl。不过你可能要失望了,因为我
们全部所需要的就只是一个文字编辑器。你在unix上,可以选择vi(vim),joe或任何你习惯的编辑器,在Windows上可以使用记事本,或下载
UltraEdit(http://www.ultraedit.com/)。不过请不要使用类似Word的这样的文书处理工具,因为这样子你只是让事情
更复杂了。当然,即使你在Windows上,你还是可以选择Vim或是Emacs这些在Unix世界获得高度评价的文字编辑器,而且他们还是自由软体。
现在,我们可以打下第一支程序了:



#!/usr/bin/perl

print "hello world\n";


相信大家很快就打完了这支程序。先别管里面到底说了甚么(虽然你们应该都看懂了),我们先来执行他吧!



[hcchien@Apple]% perl ch1.pl
hello world


好极了,结果就像我们直接用命令列执行的样子。不过至少我们知道了,只要用Perl去执行我们写出来的程序就可以了,当然,你还可以
有更简单的办法。你可以让你的档案变成可以执行,在Unix下,你只需要利用chmod来达成这样的目的。当然,我们假设你已经可以操作你的系统,至少能
够了解档案权限。修改完权限之后,你只需要在档案的所在目录打:



[hcchien@Apple]% ./ch1.pl
hello world


那么第一行又是甚么意思呢?其实这是Unix系统中,表明这支程序该以甚么方式执行的表达方式。在这里,我们希望使用
"/usr/bin/perl"这个程序来执行。所以请依照你系统内的实际状况适时改写。否则当你在执行的时候,很可能会看到"Command not
found"之类的错误讯息。
不过在真正开始写Perl之前,我们还要提醒几件事情,这些事情对于你要开始写Perl的程序是非常的重要的。
1. Perl的叙述句是用分号(;)隔开的,因此只要你的叙述句还没出现分号,Perl就不会把他当成一个完整的结束,除非你的这个叙述句是在一个区块的最后一句。我们可以在perldoc里面找到这样的范例;



print
"hello world\n"
;


而且这样的写法对 Perl来说并没有什么不同,只是对于需要维护你的程序的人来说显然并不会特别高兴。适时的空白确实可以提高程序的可读性,不过记得不要滥用,造成自己遭受埋怨。
2.
Perl是以井字号(#)作为程序的注解标示,也就是只要以井字号开始,到叙述句结束前的内容都会被当成程序注解,Perl并不会尝试去执行他,或编译
他。对于有些习惯于C程序写作的程序员而言,能够使用(/* ….
*/)来进行程序的注解确实是相当方便的。Perl并没有正式的定义方式来进行这样整个区块的注解,不过却可以利用其他方式来达到同样的目的。例如使用
pod(plain-old documentation format,简明文件格式):



#!/usr/bin/perl

print "hello world\n";

=head1
这里其实是注解,所以也是很方便的
主要是可以一次放很多行注解
=cut


如果你还想找出其他可能的替代方案,可以直接看perlfaq这份文件,而方法就是直接执行perldoc perlfaq(注四)就可以了。
接下来,我们便要真正进入Perl的环境中了。

习题:
1. 试着找出你电脑上的Perl版本为何。
2. 利用perldoc perl找出所有的perl文件内容
3. 利用Perl写出第一个程序,印出你的名字


注一:事实上,Perl有所谓的单行模式,你就只需要在命令列中执行Perl的叙述句。
注二:因此也有人戏称Perl是「胶水程序语言」。
注三:就是所谓的「Common Gateway Interface」,动态网站程序的设计界面。
注四:perldoc里有着许多非常有用的文件,你可以考虑试着看看perldoc perldoc。