The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

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