NAME
perlintro -- Perl简介和概览
DESCRIPTION
该文档将为您æ��ä¾›Perl编程è¯è¨€çš„快速概览,并指导您阅读其他更深入的文档。 对于刚刚接触Perl的人,它å�¯ä»¥è¢«å½“作一份"入门"å�‘导。它æ��供刚刚好的信æ�¯ï¼Œ ä½¿ä½ èƒ½å¤Ÿé˜…è¯»åˆ«äººçš„Perl代ç �并粗略知é�“这些代ç �在å�šä»€ä¹ˆï¼Œä»¥å�Šèƒ½å¤Ÿè‡ªå·±ç¼–写简å�• 的脚本。
这份介ç»�性的文档并ä¸�打算覆盖全é�¢ã€‚它甚至ä¸�打算写的é�žå¸¸ç²¾ç¡®ã€‚有时为了抓ä½�é‡�点, 我们必须牺牲完美。强烈建议您看完本介ç»�以å�Žç»§ç»é˜…读整个Perl手册获å�–更多的信æ�¯ã€‚ Perl手册的目录å�‚è§�perltoc。
在本文档ä¸ä½ 会到处看到对Perlæ–‡æ¡£çš„å…¶ä»–éƒ¨åˆ†çš„å¼•ç”¨ã€‚ä½ å�¯ä»¥ä½¿ç”¨ä½ 现在æ£ç”¨æ�¥é˜…读 本文档的方法或perldoc
指令去阅读那些文档。
Perl是什么?
Perl是一门常规用途的è¯è¨€ã€‚最åˆ�被开å�‘出æ�¥ç”¨äºŽæ–‡æœ¬å¤„ç�†ï¼ˆç»´æŠ¤ï¼‰ã€‚现在被用于系统 管ç�†ã€�webå¼€å�‘ã€�网络编程ã€�图形用户界é�¢(GUI)å¼€å�‘以å�Šæ›´å¤šå…¶ä»–ç‰å�„ç§�任务。
这门è¯è¨€è¢«è®¾è®¡å¾—实用(容易使用ã€�高效ã€�完整)胜于美观(å¾®å°�ã€�文雅ã€�简化)。它的 主è¦�特点是容易使用,支æŒ�é�¢å�‘过程编程和é�¢å�‘对象编程,内建强大的文本处ç�†èƒ½åŠ›ï¼Œ 以å�Šæ‹¥æœ‰ä¸–界上最著å��的第三方模å�—集å�ˆã€‚
perl,perlfaq1和其他地方给出了关于Perl的��定义。从而我们�以看出Perl 对于��的人�味���的东西,但至少他们都愿�把它记述下�。
�行Perl程�
从Unix命令行�行Perl程�:
perl progname.pl
或者把下é�¢çš„代ç �å†™åˆ°ä½ è„šæœ¬çš„ç¬¬ä¸€è¡Œï¼š
#!/usr/bin/env perl
... 然��行/path/to/script.pl
。当然,该脚本必须具有执行��,使用 chmod 755 script.pl
改���(Unix下)。
更多信�,包括其他平�(如Windows和Mac OS)的说明,请阅读perlrun。
基本è¯æ³•æ¦‚览
一个Perl脚本/程åº�由一æ�¡æˆ–多æ�¡è¯å�¥ç»„æˆ�。这些è¯å�¥ç›´æŽ¥å†™åœ¨è„šæœ¬é‡Œï¼Œè€Œä¸�是需è¦�写 在什么main()
或者类似的东西里。
perlè¯å�¥ä»¥åˆ†å�·(;)结尾:
print "Hello, world";
注释使用井�(#)开始,作用直到该行末尾
# 这是一个注释
ç©ºç™½æ˜¯æ— å…³ç´§è¦�的:
print
"Hello, world"
;
... 除é�žæ˜¯åœ¨è¢«å¼•èµ·æ�¥çš„å—符串里:
# 下é�¢çš„打å�°ä¸é—´ä¼šæœ‰ä¸€ä¸ªæ�¢è¡Œç¬¦
print "Hello
world";
å�¯ä»¥ä½¿ç”¨å�Œå¼•å�·æˆ–å�•å¼•å�·åŒ…å›´æ–‡å—串:
print "Hello, world";
print 'Hello, world';
然而,å�ªæœ‰å�Œå¼•å�·å�¯ä»¥"内æ�’"å�˜é‡�和特殊å—符,如æ�¢è¡Œ(\n
):
print "Hello, $name\n"; # 内���和�行
print 'Hello, $name\n'; # 打å�°å‡ºå—é�¢çš„$name\n
æ•°å—ä¸�需è¦�用引å�·å¼•èµ·ï¼š
print 42;
ä½ å�¯ä»¥æ ¹æ�®ä½ 的喜好选择把函数å�‚数用括å�·æ‹¬èµ·æ�¥ï¼Œæˆ–者忽略括å�·ã€‚括å�·å�ªæœ‰åœ¨å�¶å°”用于 é˜�明优先级问题的时候æ‰�被需è¦�。
print("Hello, world\n");
print "Hello, world\n";
关于Perlè¯æ³•çš„详细信æ�¯è¯·å�‚阅perlsyn。
Perl��类型
Perl有三ç§�å�˜é‡�ç±»åž‹ï¼šæ ‡é‡�(scalar)ã€�数组(array)ã€�散列(hash)。
- æ ‡é‡�(scalar)
-
ä¸€ä¸ªæ ‡é‡�表示一个å�•ä¸€çš„值:
my $animal = "camel"; my $answer = 42;
æ ‡é‡�å�¯ä»¥æ˜¯å—符串ã€�整数或浮点数。在需è¦�的时候,Perlå�¯ä»¥è‡ªåŠ¨å¯¹å®ƒä»¬è¿›è¡Œç›¸äº’转æ�¢ã€‚ ä¸�需è¦�预先声明å�˜é‡�类型。
æ ‡é‡�的使用å�¯ä»¥æœ‰å‡ ç§�æ–¹å¼�:
print $animal; print "The animal is $animal\n"; print "The square of $answer is ", $answer * $answer, "\n";
有许多看起æ�¥åƒ�æ ‡ç‚¹ç¬¦å�·æˆ–行噪音(line noise)çš„"é”力"æ ‡é‡�ã€‚è¿™äº›ç‰¹æ®Šçš„æ ‡é‡�被用于 å�„ç§�用途,å�‚考perlvarã€‚çŽ°åœ¨ä½ å”¯ä¸€éœ€è¦�知é�“的是
$_
,å�³"缺çœ�å�˜é‡�"。它被用 作Perlä¸è®¸å¤šå‡½æ•°çš„缺çœ�å�‚数,å�¦å¤–æŸ�些循环结构会éš�å�«åœ°è®¾ç½®å®ƒçš„值。print; # 缺çœ�会打å�°å‡º$_的内容
- 数组
-
一个数组表示一系列值(一些值的列表):
my @animals = ("camel", "llama", "owl"); my @numbers = (23, 42, 69); my @mixed = ("camel", 42, 1.23);
æ•°ç»„ä¸‹æ ‡ä»Ž0开始。下é�¢å±•ç¤ºäº†å¦‚何从数组ä¸èŽ·å�–å…ƒç´ ï¼š
print $animals[0]; # prints "camel" print $animals[1]; # prints "llama"
特殊��
$#array
èƒ½å‘Šè¯‰ä½ ä¸€ä¸ªæ•°ç»„çš„æœ€å�Žä¸€ä¸ªå…ƒç´ çš„ä¸‹æ ‡ï¼šprint $mixed[$#mixed]; # 最å�Žä¸€ä¸ªå…ƒç´ ,输出1.23
ä½ å�¯èƒ½ä¼šè¢«å¼•è¯±ä½¿ç”¨
$#array + 1
æ�¥èŽ·å�–数组ä¸å…ƒç´ 的个数。别烦æ�¼ã€‚å†�有这ç§�需è¦� 的时候,在PerlæœŸå¾…æ ‡é‡�值的地方("åœ¨æ ‡é‡�上下文ä¸")使用@array
就能得到数组ä¸å…ƒ ç´ çš„ä¸ªæ•°ï¼šif (@animals < 5) { ... }
我们从数组ä¸èŽ·å�–å…ƒç´ æ˜¯ä»¥
$
æ‰“å¤´ï¼Œè¿™æ˜¯å› ä¸ºæˆ‘ä»¬ä»Žæ•°ç»„ä¸å�–出的仅仅是一个å�•ä¸€çš„ 值 -- ä½ è¯·æ±‚ä¸€ä¸ªæ ‡é‡�ï¼Œä½ å¾—åˆ°ä¸€ä¸ªæ ‡é‡�。è¦�从数组ä¸å�–得多个值:
@animals[0,1]; # 得到 ("camel", "llama"); @animals[0..2]; # 得到 ("camel", "llama", "owl"); @animals[1..$#animals]; # 得到除第一个之外的所有元ç´
这��"数组切片"。
ä½ å�¯ä»¥å¯¹åˆ—表å�šå�„ç§�有用的事:
my @sorted = sort @animals; my @backwards = reverse @numbers;
å�Œæ ·ï¼Œä¹Ÿå˜åœ¨ä¹Ÿäº›ç‰¹æ®Šçš„数组,比如
@ARGV
(脚本的命令行�数)和@_
(ä¼ é€’ç»™å�例程 çš„å�‚æ•°)。这些都在perlvarä¸æœ‰è¯¦ç»†æ–‡æ¡£ã€‚ - 散列
-
一个散列表示一套"键/值"对:
my %fruit_color = ("apple", "red", "banana", "yellow");
ä½ å�¯ä»¥ç”¨ç©ºç™½å’Œ
=>
�作符把它们摆放的漂亮些:my %fruit_color = ( apple => "red", banana => "yellow", );
è¦�获å�–ä¸€ä¸ªæ•£åˆ—å…ƒç´ ï¼š
$fruit_color{"apple"}; # 得到 "red"
ä½ å�¯ä»¥åˆ†åˆ«ä½¿ç”¨
keys()
å’Œvalues()
获�散列的键列表和值列表。my @fruits = keys %fruit_colors; my @colors = values %fruit_colors;
散列没有特定的内部顺åº�ï¼Œå°½ç®¡ä½ å�¯ä»¥æŽ’列所有的键并é��历它们。
å°±åƒ�ç‰¹æ®Šæ ‡é‡�和特殊数组,Perl里也有特殊散列。这其ä¸æœ€è‘—å��的是
%ENV
。它包�� 所有环境��。关于这个(和其他特殊��)请阅读perlvar。
���数组和散列的更多文档请�perldata。
æ›´å¤�æ�‚çš„æ•°æ�®ç±»åž‹ä½¿ç”¨å¼•ç”¨æž„é€ ï¼Œå�¯ä»¥ä½¿ä½ 创建列表和散列的列表和散列。
ä¸€ä¸ªå¼•ç”¨æ˜¯ä¸€ä¸ªæ ‡é‡�值。它å�¯ä»¥æŒ‡å�‘(引用)任何其他数æ�®ç±»åž‹(的值)ã€‚è¿™æ ·ï¼Œé€šè¿‡å˜å‚¨ ä¸€ä¸ªå¯¹æ•°ç»„æˆ–æ•£åˆ—çš„å¼•ç”¨ï¼Œä½ å�¯ä»¥è½»æ˜“地创建列表和散列的列表和散列。
my $variables = {
scalar => {
description => "single item",
sigil => '$',
},
array => {
description => "ordered list of items",
sigil => '@',
},
hash => {
description => "key/value pairs",
sigil => '%',
},
};
print "Scalars begin with a $variables->{'scalar'}->{'sigil'}\n";
关于引用这个主题的详细信��以��perlreftut�perllol�perlref和 perldsc。
��作用域
贯穿之å‰�ç« èŠ‚çš„æ‰€æœ‰ä¾‹å�ï¼Œéƒ½ä½¿ç”¨äº†è¿™æ ·çš„è¯æ³•ï¼š
my $var = "value";
my
实际上ä¸�æ˜¯å¿…é¡»çš„ï¼›ä½ å�¯ä»¥ä»…ä»…ä½¿ç”¨è¿™æ ·çš„è¯æ³•ï¼š
$var = "value";
然å�Žï¼Œä¸Šé�¢è¿™ç§�ç”¨æ³•ä¼šåˆ›å»ºè´¯ç©¿ä½ ç¨‹åº�的全局å�˜é‡�。这是一个ä¸�å¥½çš„ç¼–ç¨‹ä¹ æƒ¯ã€‚è€Œmy
创建的是è¯�法å�˜é‡�。这ç§�å�˜é‡�的作用域会局é™�于定义它的å�—(也就是一套包围在大括 å�·({})里的è¯å�¥)里。
my $a = "foo";
if ($some_condition) {
my $b = "bar";
print $a; # 输出 "foo"
print $b; # 输出 "bar"
}
print $a; # 输出 "foo"
print $b; # 什么都�输出;$b已�超出了作用域
��使用my
和Perl脚本顶部的use strict;
,æ„�味ç�€è§£é‡Šå™¨å°†æ£€æŸ¥æŸ�些常è§�的编程 错误。举例æ�¥è¯´ï¼Œåœ¨ä¸Šé�¢çš„例å�里,最å�Žçš„print $b
会产生一个编译时错误并阻æ¢ä½ è¿�行程åº�。强烈推è��使用strict
。
�件和循环结构
Perlæ‹¥æœ‰å‡ ä¹Žæ‰€æœ‰å¸¸è§�çš„æ�¡ä»¶å’Œå¾ªçŽ¯ç»“构,除了case/switch(但å�‡å¦‚ä½ å®žåœ¨æƒ³è¦�, Perl 5.8å�Šä»¥ä¸Šçš„版本或CPAN里有一个Switch模å�—。关于模å�—å’ŒCPAN,请看å�Žé�¢å…³äºŽæ¨¡ å�—çš„ç« èŠ‚)。
æ�¡ä»¶å�¯ä»¥æ˜¯ä»»ä½•Perl表达å¼�。å�‚看下一节ä¸å…³äºŽæ¯”较和布尔逻辑æ“�作符的列表。它们在 æ�¡ä»¶è¯å�¥é‡Œå¾ˆå¸¸ç”¨ã€‚
- if
-
if ( condition ) { ... } elsif ( other condition ) { ... } else { ... }
if还有一个�定版本:
unless ( condition ) { ... }
è¿™ç‰å�ŒäºŽ
if (!condition)
,但是一个更易读的版本。注æ„�在Perl里括å�·æ˜¯å¿…须的,就算å�—里å�ªæœ‰ä¸€è¡Œã€‚然而,有一个è�ªæ˜Žçš„方法å�¯ä»¥è®©ä½ çš„ å�•è¡Œè¯å�¥å�—看起æ�¥æ›´åƒ�英è¯ï¼š
# ä¼ ç»Ÿæ–¹å¼� if ($zippy) { print "Yow!"; } # Perlishå‰�置方å¼� print "Yow!" if $zippy; print "We have no bananas" unless $bananas;
- while
-
while ( condition ) { ... }
基于å�Œæ ·çš„åŽŸå› ï¼Œä¹Ÿæœ‰ä¸€ä¸ªå�¦å®šç‰ˆæœ¬ --
unless
:until ( condition ) { ... }
ä½ ä¹Ÿå�¯ä»¥ä½¿ç”¨æ�¡ä»¶å�Žç½®çš„
while
:print "LA LA LA\n" while 1; # 永远循环
- for
-
è·ŸCä¸€æ¨¡ä¸€æ ·ï¼š
for ($i=0; $i <= $max; $i++) { ... }
在Perl里很少需è¦�用到Cæ ·å¼�çš„å¾ªçŽ¯ï¼Œå› ä¸ºPerlæ��供了更å�‹å–„的列表é��历方法 --
foreach
循环。 - foreach
-
foreach (@array) { print "This element is $_\n"; } # ä½ ä¸�一定é�žå¾—使用缺çœ�çš„$_... foreach my $key (keys %hash) { print "The value of $key is $hash{$key}\n"; }
关于循环结构(以�一些这篇概览里没有�到的结构)的更多细节,请��perlsyn。
内建�作符和函数
Perl自带了一大套内建函数。有一些我们已��识过了:print
�sort
和 reverse
。perlfunc的开始处有内建函数的完整列表。å�¦å¤–ä½ å�¯ä»¥å¾ˆæ–¹ä¾¿åœ°ä½¿ç”¨ perldoc -f functionname
查看�个给定函数。
Perl�作符详细记述于perlop。�过这里我们先看看一些最常用的:
- 算术
-
+ åŠ - å‡� * 乘 / 除
- æ•°å—比较
-
== ç›¸ç‰ != ä¸�ç‰ < å°�于 > 大于 <= å°�ç‰äºŽ >= 大ç‰äºŽ
- å—符串比较
-
eq ç›¸ç‰ ne ä¸�ç‰ lt å°�于 gt 大于 le å°�ç‰äºŽ ge 大ç‰äºŽ
(为什么我们è¦�分离数å—å’Œå—ç¬¦ä¸²æ¯”è¾ƒï¼Ÿå› ä¸ºæˆ‘ä»¬æ²¡æœ‰æŒ‡å®šçš„å�˜é‡�类型,而perl需è¦�知é�“ 我们是è¦�按数å—排åº�(99应该å°�于100),还是按å—符排åº�(100应该在99å‰�é�¢)。
- 布尔逻辑
-
&& and || or ! not
(
and
�or
å’Œnot
ä¸�仅仅是在上表ä¸ä½œä¸ºæ“�作符的æ��è¿° -- 它们也是享有Perl支 æŒ�çš„æ“�作符。它们比Cæ ·å¼�çš„æ“�作符更易读,但是与&&
�其他�符具有��的有�级。 查看perlop以获�更多细节。) - 其他
-
= 赋值 . å—符串比较 x å—符串乘 .. 范围æ“�作符(创建数å—的列表)
许多�作符�以和=
结å�ˆä½¿ç”¨ï¼Œåƒ�下é�¢è¿™æ ·ï¼š
$a += 1; # same as $a = $a + 1
$a -= 1; # same as $a = $a - 1
$a .= "\n"; # same as $a = $a . "\n";
文件和I/O
ä½ å�¯ä»¥ä½¿ç”¨open()
函数打开一个文件用于输入或输出。在perlfuncå’Œ perlopentutä¸æœ‰è¯¦ç»†å¾—近乎奢侈的文档。简而言之:
open(INFILE, "input.txt") or die "Can't open input.txt: $!";
open(OUTFILE, ">output.txt") or die "Can't open output.txt: $!";
open(LOGFILE, ">>my.log") or die "Can't open logfile: $!";
使用<>
æ“�ä½œç¬¦ï¼Œä½ å�¯ä»¥ä»Žä¸€ä¸ªå·²æ‰“开的文件å�¥æŸ„ä¸è¯»å�–æ•°æ�®ã€‚åœ¨æ ‡é‡�上下文ä¸ï¼Œ 它æ¯�次从文件å�¥æŸ„ä¸è¯»å�–一行。在列表上下文ä¸ï¼Œå®ƒä¼šä¸€æ¬¡è¯»å…¥æ•´ä¸ªæ–‡ä»¶ï¼Œå¹¶æŠŠæ¯�一行 èµ‹ç»™åˆ—è¡¨çš„ä¸€ä¸ªå…ƒç´ ï¼š
my $line = <INFILE>;
my @lines = <INFILE>;
一次读入整个文件也å�«å�šå•œé£Ÿ(sluping)。有时候会有用,ä¸�过很耗内å˜ã€‚多数的文本处ç�† 工作å�¯ä»¥ä½¿ç”¨Perl的循环结构一次一行地进行。
<>
�作符最常�于while
循环:
while (<INFILE>) { # �行轮�赋给$_
print "Just read in this line: $_";
}
我们已ç»�è§�过如何å�‘æ ‡å‡†è¾“å‡ºæ‰“å�° -- 使用print()
。然而,print()
还有一个�选 的第一个�数,用于指定输出用的文件�柄:
print STDERR "This is your final warning.\n";
print OUTFILE $record;
print LOGFILE $logmessage;
å½“ä½ è¿›è¡Œå®Œæ‰€æœ‰å¯¹æ–‡ä»¶å�¥æŸ„çš„æ“�作å�Žï¼Œä½ 应该close()
它们(虽然è€�å®žåœ°è¯´ï¼Œå¦‚æžœä½ å¿˜ 了,Perlä¼šæ›¿ä½ æ¸…ç�†):
close INFILE;
æ£åˆ™è¡¨è¾¾å¼�
Perl对æ£åˆ™è¡¨è¾¾å¼�的支æŒ�是广泛而深入的。perlrequickã€�perlretutå�Šå…¶ä»–地方的 冗长文档都是关于这个主题的。尽管如æ¤ï¼Œç®€è€Œè¨€ä¹‹ï¼š
- 简�匹�
-
if (/foo/) { ... } # 当$_包�"foo"时为真 if ($a =~ /foo/) { ... } # 当$a包�"foo"时为真
匹��作符
//
在perlopä¸æœ‰æ–‡æ¡£è®°è¿°ã€‚它缺çœ�对$_
进行�作,或者�以通过使用 绑定�作符=~
(也在perlopä¸æœ‰è®°è¿°)绑定到其他å�˜é‡�。 - 简å�•æ›¿æ�¢
-
s/foo/bar/; # 把$_ä¸çš„foo替æ�¢æˆ�bar $a =~ s/foo/bar/; # 把$aä¸çš„foo替æ�¢æˆ�bar $a =~ s/foo/bar/g; # 把$aä¸çš„所有foo都替æ�¢æˆ�bar
替��作符
s///
记述于perlopä¸ã€‚ - æ›´å¤�æ�‚çš„æ£åˆ™è¡¨è¾¾å¼�
-
ä½ ä¸�必仅仅匹é…�固定的å—符串。实际上,通过使用å¤�æ�‚çš„æ£åˆ™è¡¨è¾¾å¼�ï¼Œä½ å�¯ä»¥åŒ¹é…�梦想的 任何东西。这些都记述在超长的perlre文档里。但是è¶�这会儿,先看看快速作弊å�¡ï¼š
. å�•ä¸ªå—符 \s 空白å—符(ç©ºæ ¼ã€�制表符(tab)ã€�æ�¢è¡Œ) \S é�žç©ºç™½å—符 \d 一个阿拉伯数å—(0-9) \D 一个é�ž(阿拉伯)æ•°å— \w 一个å�•è¯�(word)å—符(a-zã€�A-Zã€�0-9ã€�_) \W 一个é�žå�•è¯�å—符 [aeiou] 匹é…�给定集å�ˆä¸çš„å�•ä¸ªå—符 [^aeiou] 匹é…�给定集å�ˆä¹‹å¤–çš„å�•ä¸ªå—符 (foo|bar|baz) 匹é…�指定选择ä¸çš„任何一个 ^ å—符串开始 $ å—符串结尾
é™�é‡�符(quantifier)å�¯ä»¥ç”¨æ�¥æŒ‡å®šå®ƒå‰�é�¢çš„东西匹é…�的次数。这里"东西"指的å�¯ä»¥æ˜¯ 一个文å—çš„å—符,或者上é�¢åˆ—出的这些元å—符ä¸çš„一个,也å�¯ä»¥æ˜¯æ‹¬åœ¨æ‹¬å�·ä¸çš„一组 å—符和元å—符。
* 0次或多次 + 1次或多次 ? 0次或1次 {3} 匹�3次 {3,6} 匹�3到6次 {3,} 匹�3次或更多
一些简è¦�的例å�:
/^\d+/ 以一个或多个阿拉伯数å—开头的å—符串 /^$/ 空å—符串(开始ä½�置和结æ�Ÿä½�置连在一起) /(\d\s){3}/ 三个阿拉伯数å—,æ¯�个数å—å�Žé�¢æœ‰ä¸ªç©ºç™½å—符(如:"3 4 5 ") /(a.)+/ 匹é…�一个å—符串,它的æ¯�个第奇数个å—符都是a (如:"abacadaf") # 下é�¢è¿™ä¸ªå¾ªçŽ¯ä»Žæ ‡å‡†è¾“å…¥(STDIN)读入,然å�Žè¾“出æ¯�一个é�žç©ºçš„行: while (<>) { print; }
- 用于��的括�
-
除了分组,括å�·è¿˜æœ‰ç¬¬äºŒä¸ªä½œç”¨ã€‚它们å�¯ä»¥è¢«ç”¨æ�¥æ�•æ�‰æ£åˆ™åŒ¹é…�çš„æŸ�些部分的结果以备 å�Žç”¨ã€‚结果被ä¿�å˜åœ¨
$1
�$2
ä¾�æ¤ç±»æŽ¨ç‰å�˜é‡�里。# 一个简å�•è€Œè‚®è„�çš„æ–¹å¼�æ�¥æŠŠemail地å�€æ‹†æˆ�å‡ éƒ¨åˆ† if ($email =~ /([^@]+)@(.+)/) { print "Username is $1\n"; print "Hostname is $2\n"; }
- 其他æ£åˆ™è¡¨è¾¾å¼�特性
-
Perlæ£åˆ™è¿˜æ”¯æŒ�å�‘å�Žå¼•ç”¨(backreference)ã€�å‰�çž»(lookahead)以å�Šå�„ç§�其他å¤�æ�‚的细节。 这些全都能从perlrequickã€�perlretutå’Œperlreä¸è¯»åˆ°ã€‚
编写å�例程
编写å�例程很容易:
sub log {
my $logmessage = shift;
print LOGFILE $logmessage;
}
那个shift
æ˜¯ä»€ä¹ˆï¼Ÿå¥½çš„ï¼Œä¼ é€’ç»™å�例程的å�‚数都å˜å‚¨åœ¨ä¸€ä¸ªå�«@_
的特殊数组里(� 阅perlvar)。而shift
函数的缺çœ�å�‚æ•°æ£å¥½æ˜¯@_
ã€‚å› è€Œ my $logmessage = shift;
会移出å�‚æ•°åˆ—è¡¨çš„ç¬¬ä¸€ä¸ªå…ƒç´ å¹¶æŠŠå®ƒèµ‹ç»™$logmessage
。
我们也�以用其他方���作@_
:
my ($logmessage, $priority) = @_; # 常用
my $logmessage = $_[0]; # �常用,而且丑陋
å�例程å�¯ä»¥è¿”回值:
sub square {
my $num = shift;
my $result = $num * $num;
return $result;
}
关于编写å�例程的更多信æ�¯ï¼Œå�‚è§�perlsub。
��对象(OO)Perl
é�¢å�‘对象Perl相对简å�•ï¼Œæ˜¯ç”¨å¼•ç”¨å®žçŽ°çš„。这些引用知é�“它们自己是哪ç§�对象(基于Perl ä¸çš„包的概念)。然å�Žï¼Œé�¢å�‘对象Perl严é‡�超出了本文档的讨论范围。请阅读perlbootã€� perltootã€�perltoocå’Œperlobj。
作为Perlåˆ�级程åº�å‘˜ï¼Œä½ ç”¨åˆ°é�¢å�‘对象Perl最多是在使用第三方模å�—的时候,下é�¢çš„文档 就会讲到。
使用Perl模�
Perl模å�—æ��ä¾›ä¸€ç³»åˆ—çš„ç‰¹æ€§ä»¥ä½¿ä½ é�¿å…�é‡�å¤�å�‘明轮å�。Perl模å�—å�¯ä»¥ä»ŽCPAN ( http:www.cpan.org/ )下载。大é‡�的常用的模å�—被直接包å�«åœ¨Perlå�‘行版里。
模�类别从文本维护到网络�议到数�库集�,�到图形图�,应有尽有。模�的分类 列表也�以在CPAN上找到。
è¦�å¦ä¹ å¦‚ä½•å®‰è£…ä½ ä»ŽCPAN上下载的模å�—,阅读perlmodinstall。
è¦�å¦ä¹ 如何使用一个特定的模å�—,使用perldoc Module::Name
。一般æ�¥è¯´ï¼Œä½ 会需è¦� use Module::Name
ã€‚è¿™ä¼šä½¿ä½ éš�å�Žèƒ½å¤Ÿè®¿é—®å¯¼å‡ºçš„函数或者该模å�—的一个é�¢å�‘对象 接å�£ã€‚
perlfaq里有关于å�„ç§�常è§�任务的æ��问和ç”æ¡ˆï¼Œè€Œä¸”å¸¸å¸¸ä¼šå»ºè®®ä½ ä½¿ç”¨ä¸€äº›ä¼˜ç§€CPAN模 å�—。
perlmodæ��ä¾›Perl模å�—çš„å…¨é�¢æ¦‚è¦�。perlmodlibåˆ—å‡ºäº†æ‰€æœ‰ä½ å®‰è£…çš„Perl自带的 模å�—。
å¦‚æžœä½ æœ‰ç¼–å†™Perl模å�—的冲动,perlnewmodä¼šç»™ä½ å¾ˆå¥½çš„å»ºè®®ã€‚
AUTHOR
Kirrily "Skud" Robert <skud@cpan.org>
Translated by Achilles Xu <formalin14@gmail.com>
1 POD Error
The following errors were encountered while parsing the POD:
- Around line 3:
Non-ASCII character seen before =encoding in 'Perl简介和概览'. Assuming CP1252