新普京网站-澳门新普京 > 前端 > 新普京网站:可不可以成为你新的脚本语言,Perl完全自学手册图像和文字化教育程

新普京网站:可不可以成为你新的脚本语言,Perl完全自学手册图像和文字化教育程

2019/12/30 02:17

某些背景

率先个自个儿真正热爱的编制程序语言是 C。小编花了数不清时日才找到它:当本身可能叁个子女,作者就最早在难得的ZX Spectrum上选择 Z80 汇编。那多少个生活是你能够真正掌握你的微管理机的时候,你无需苹果,Google,微软或然其他任何人的允许就能够写贰个顺序。小编在美貌的128K ZX Spectrum +2上学习了在超出 CPU 寻址空间时对内部存款和储蓄器块分页。直到作者进来学院,小编本事有生机勃勃台 IBM PC 机 。小编玩遍了机械钟格,试图修复现成的 Fortran 程序,用土耳其共和国字符给键盘驱动打补丁,还学了点 帕斯Carl语言。之后,在作者就任于土耳其共和国中央银行时期,笔者又上学了 SQL 和 APL。

新普京网站 ,作者直接对 C 语言有所耳闻,但自己一直尚未接触到生龙活虎款C语言编写翻译器。直到本身到康奈尔大学持有了三个Unix 账号之后,笔者编写翻译了自己人生中的第三个 hello.c 文件,不久从此,俺有了第意气风发台计算机……小编在 DOS 分区上安装了 DJGPP 编写翻译器,构建了自己人生中第4个 Linux 内核(小编先是个发行版是 Debian),何况开端上学 C 语言。Plauger 的 “Standard C Library” 是本人最欢快的书。

当本身最早饥肠辘辘用 C 编制程序的时候,C++ 已经广泛应用超过十年了。所以,小编下一步使用 C++ 看起来是很自然的一步了。

除却……好啊,除了 C++ 是一片混乱。目前,全部人都被三回九转档案的次序深深迷惑了,每一个人都在编制精心设计的字符串类。大大多硬盘都太慢,不能再轻便的时日内编写翻译出可信的 C++ 库(可以吗,小编多少夸张了),大多数 CPU 都在希图实例化模板中溶化了,大多数人,那一个伪装 C++ 程序员的 C 程序员们,差一点就把 malloc 的重临值给扔了。

在这里个时候,笔者正马不停蹄试图确立定制化的网络经济实验,看起来 Java 如同很有优势。最少,它不须求费心地拼凑出贰个对话框。发生少些的 socket 连接,况兼令你的使用编译和平运动行在有滋有味的类别上。当然,AWT 和 Swing 都非常丑陋且笨重,但对本人的目标来讲,那无妨。

而是,仅仅是因为不可能在实验室之外运转作者的推行(因为在实验室已经安排了具备电脑,java应用程序运转不会有毛病)。所以笔者十分的快的把FreeBSD陈设到了生龙活虎台拥有100Mhz奔腾微处理机,16Mb内部存款和储蓄器,在角落里搜聚灰尘的机械上,并搭建了叁个具备perl模块(mod_perl)的Apache服务器,然后就能够源办公室事了。那就是本身爱上Perl的时候。

那份爱完全起点于实用的原故,笔者并非以为Perl非常的包罗万象,並且那个时候作者以为包涵此外超多言语都不是很周密,他们中的每二个都有温馨的劣点。

Perl总是能压缩本身一定要化解的极其难题的行事的多少,某个是因为言语特色,但多数是因为 CPAN。

比方来讲,作为三个 Perl 技术员,拆解分析 HTML 作为 HTML 是多少个缓慢解决方案。作者必得决定,要么就协会整个树, 恐怕使用流化的方法。在少数处境下,前面二个是具备优势的,但前者的裨益是足以使内部存款和储蓄器的供给减低到最低,纵然是在这里个时代,倘若您处理HTML 文书档案以兆字节格局依然足以奏效的。无论哪一类方法,这么些工具都不会在低效的 HTML 上被打断,并在非 XML 的得力 HTML 上运转突出。

还应该有,Perl 提供可移植性。若是本人无需操作系统特定的意义,不用别样修正地点,作者的 perl 代码就能够运维。

当本人写了一些类,并为它们做了打包,也不会有盘根错节的结构。

erl,生机勃勃种成效丰富的Computer程序语言,运行在超越100种Computer平台上,适用布满,从大型机到便携设施,从便捷原型创造到相近可扩展开拓。

澳门新普京 ,C++ 涅槃

在过去的数年,C++如获新生。大多智囊已经最首发掘到必得向C++程序猿提供同一时间蕴涵 work of the ISO committee和 boost的塑造立模型块。

在安分守己蒙受下,依然有十分九的新手生成C++程序猿正是没有察觉到new是一个合法符号的C技师。在这里上面,C++与Perl特别相近:大多数人写过Perl代码的人也从没意识到Perl不是C、Java、Python、shell、Awk恐怕其余你能够列举的语言。

然则,当您见到新C++规范中的新东西,甚至编写翻译器不断落成浙DongFeng味的情报时,我们鞭不比腹遏制住内心的提神和古怪。

Perl最早的设计者为Larry·Wall(LarryWall),于1990年十一月12日见报。今后的本子为Perl 6,于二零一四年八月12日更新。

单词计算练习

那是三个轻松的练习,使用 C++ 大概 Perl 并且不注重外界库,所以那是多少个很好的起源。

那是 Perl 版本,供您参谋:

#!/usr/bin/env perl

use strict;
use warnings;

run(/@ARGV);

sub run {
    my $argv = shift;
    my @counts;

    for my $file ( @$argv ) {
        my $count = -1;
        eval {
            $count = word_count($file);
            1;
        } or warn "$@";

        push @counts, {
            file => $file,
            word_count => $count,
        };
    }

    for my $result (@counts) {
        printf "%s: %d words/n", $result->{file}, $result->{word_count};
    }
}

sub word_count {
    my $file = shift;
    my %words;

    open my $fh, '<', $file
        or die "Cannot open '$file': $!";

    while (my $line = <$fh>) {
        my @words = split ' ', $line;
        $words{ $_ } += 1 for @words;
    }

    close $fh;

    my $word_count;
    $word_count += $_ for values %words;
    return $word_count;
}

况且,那是自家最大的提交在转会 Perl 到今世风格的 C++ 下面。作者从未尝试写极其好笑的代码:只是和 Perl 相符,笔者把主要放在写代码上边,使得作者感到非常自然,同有时候有限支撑八个程序都做大约肖似的事情。

#include <cerrno>
#include <cstdio>
#include <cstdlib>
#include <fstream>
#include <iostream>
#include <numeric>
#include <unordered_map>
#include <string>
#include <vector>

using std::accumulate;
using std::cerr;
using std::cout;
using std::endl;
using std::ifstream;
using std::make_pair;
using std::pair;
using std::strerror;
using std::string;
using std::unordered_map;
using std::vector;

int word_count(const char *const file) noexcept(false);

int main(int argc, char *argv[]) {
    vector< pair<string, int> > counts {};

    for (auto i = 1; i < argc; i += 1) {
        try {
            counts.push_back(make_pair(argv[i], word_count(argv[i])));
        } catch (const string& e) {
            cerr << e << endl;
            counts.push_back(make_pair(argv[i], -1));
        }
    }

    for (auto& result : counts) {
        cout << result.first << ": " << result.second << " words" << endl;
    }

    return 0;
}

int
word_count(const char *const file) noexcept(false) {
    errno = 0;
    ifstream fp(file);
    {
        // Does fp.fail() preserve errno?
        int save_errno = errno;
        if (fp.fail()) {
            throw("Cannot open '" + string(file) + "': " + strerror(save_errno));
        }
    }

    unordered_map<string, int> word_count {};
    string word;

    while (fp >> word) {
        word_count[word] += 1;
    }

    fp.close();

    return accumulate(
        word_count.cbegin(),
        word_count.cend(),
        0,
        [](int sum, auto& el) { return sum += el.second; }
    );
}

20 行代码用于 #include 和 using 注脚大概看起来有一点点多,可是作者抬眼 using namespace std,也刻骨仇隙不断地输入 std::… 更加多的是因为自个儿爱怜非常短的代码行。

首先要留神的是尚未看得见的显式的内部存储器分配。容器集装国际集装箱管理理本人的内存。

其次,那是三个大主题材料:大家有活动导入(autovivification)!

unordered_map<string, int> word_count {};
string word;

while (fp >> word) {
    word_count[word] += 1;
}

第三,我们有 lambda 表达式:

return accumulate(
    word_count.cbegin(),
    word_count.cend(),
    0,
    [](int sum, auto& el) { return sum += el.second; }
);

在这里背后,accumulate 将中间变量开始化为 0,并调用一个佚名函数,其最终多个参数钦定为当下值,以致word_count的下二个因素。

于今,笔者只可以承认,小编不掌握这么些特点是何许得以实现的,不过 Microsoft Visual C++ 二〇一六 RC 成功运维了,微软如同终于遭遇了在该领域的最新发展。

Perl借取了C、sed、awk、shell 脚本语言甚至比较多其余程序语言的特色,此中最要紧的风味是它里面集成了正则表明式的作用,以至宏大的第三方代码库CPAN。总之,Perl像C相近强盛,像awk、sed等剧本描述语言同样方便,被Perl语言爱好者称之为“生机勃勃种具备各类语言成效的梦乡脚本语言”、“Unix 中的金牌工具”。

现行反革命的景况

不过,一切都不乐观。纵然 boost libraries 抵补了多数空手,並且标准库提供了让人影像深远的构件,可是也很难战胜 Perl 和 CPAN 结合带给的这种编辑可在别之处完美运转的可移植代码的便利性。

比如说,作者能找到二个阳台非亲非故的库,能够让作者在无需 Excel 的场馆下分析或创办 Excel 文件呢?这些库能够用 clang、g++ 和 cl 轻巧地编写翻译出来呢?好像不太恐怕。

自个儿实在特别感激规范委员会的群众的费劲职业,和这个开辟编写翻译器,众多库的民众。它们让自身不要在编辑 C++ 程序时麻烦的商讨。

那让本人在真正决定本人的微微电脑时还能够认为舒畅。

在这里处,作者实在特别多谢。

你可以在/r/cpp讲评本文。

Perl 通常被称作“实用报表提取语言”(Practical Extraction and Report Language),你也大概看见“perl”,全数的字母都以小写的。常常,“Perl”,有大写的 P,是指语言自个儿,而“perl”,小写的 p,是指程序运转的解释器。

有关Perl的自学教程:

Perl完全自学手册图像和文字化教育程

引言

1987年Larry Wall发表Perl1.0来讲,客商数一贯火热扩张,同一时间更增加的程序猿与软件开采者(商)加入Perl的开拓。从开始时期被作为后生可畏种跨平台景况中书写可移植工具的高端语言起头,Perl被大范围地感觉是朝气蓬勃种工业级的强盛工具,能够在另各州方用来成功你的行事。perl的前身是Unix系统管理的多少个工具,被用在众多的小任务里。明天渐发展成为后生可畏种成效强盛的前后相继设计语言,用作Web编程、数据库管理、XML管理以至系统管理;在形成那几个专业时,同不日常间仍是可以管理经常细小工作,那是它的统筹初志。Perl非常契合系统管理和Web编制程序。实际樱笋时经被用在具有Unix(富含Linux卡塔尔(قطر‎捆绑在风华正茂道作为规范零部件公布,同临时候也用于Microsoft Windows和大概全体操作系统。Perl的使用极其普及。

    基本新闻

Perl 最早的设计者为拉里·沃尔(Larry Wall),他于1988年7月14日刊载。Perl借取了C、sed、awk、shell 脚本语言以致多数其余程序语言的性情。当中最要紧的特色是它里面集成了正则表明式的作用,以致庞大的第三方代码库CPAN。

Perl 被称作“实用报表提取语言”(Practical Extraction and Report Language)。它是术语,而不仅仅是简写,Perl的成立者,Larry沃尔建议首先个,但高速又强大到第4个。那正是怎么“Perl”未有兼具字母都大写。没要求争辩哪二个不易,拉里多少个都认可。

上一篇:没有了 下一篇:没有了