Learning Perl(Perl语言入门)学习笔记(13)

Learning.Perl.Student.Workbook Perl6版pdf、[Learning.Perl.Student.Workbook(2nd,2012.01)].brian.d.foy.文字版(此为比书后练习难度更大更综合的练习集,为英文版) 另附部分章节的正确答案。均测试。-Perl6 edition pdf, [Learning.Perl.Student.Workbook (2nd, 2012.01)]. Brian.d.foy. Text version (this is more difficult than the back of the book to practice a more comprehensive set of exercises for the English version) Attached sections of the correct answer. Were tested. 立即下载

 

第十四章  进程管理

 

1、  Perl中,可以利用system 函数启动子进程,子程序执行相应的命令并继承Perl的标准输入、标准输出以及标准错误;通常提供给system 函数的参数就是一般在shell所键入的命令,当参数里有类似于“$HOME”的环境变量时,应该将参数放在单引号中(双引号中$开头的字符串会被当作变量进行替换)或者入在双引号中并将符号“$”进行转义;

2、  当子进程运行时,Perl会一直等待直到子进程结束,当然也可以将子进程放在后台进行,这种情况下Perl将无以得知子进程的存在及运行状况;当命令“很简单”时,Perl不会用到shell,而是直接启动命令,并会在必要时使用继承而来的PATH变量;

3、  使用system 函数时,如果为其指定了多个参数(多个参数间要互相隔离),则函数的整个执行过程不会用到shell,如:

system “/bin/sh”, “-c”, $command_line;

在Unix中,函数执行返回0表示一切正常,非0表示不执行不成功,这恰与Perl的函数相反;

4、  不同于system 函数会让Perl暂停并创建一个子进程来执行所要求的命令,exec 函数会让Perl进程自己去执行所要求的命令,此时,Perl会找到并启动指定的程序而后“跳进该程序”,而原有的Perl进程将不再存在,程序执行结束后因而也没有Perl进程可以返回,于是会直接返回至提示符下;exec 函数很少单独使用,更多的是和fork一起使用;

5、  在启动其它进程时,有时候需要设定其运行环境;Perl中,环境变量可通过特殊散列%ENV取得,其中每个散列键都代表一个环境变量;在程序开始运行时,%ENV会保留从父进程(通常是shell)继承而来的设定值,因而,可以通过改变散列来改变所要用到的环境变量;

6、  使用system 和 exec 时,也可以对其执行结果进行捕获并保存至变量(可以是标量,也可以是列表)中,方法是使用反引号“`”来代替双引号或单引号,反引号里要执行的命令相当于system 的单参数形式,并且会以被双引号揪住的字符串的形式进行解释,里面的反斜线转义序列与变量都会被适当地展开;如:

     $mydate = `date`;

7、  反引号要等效于单引号会很麻烦,也没有简单的办法使之对应到system 的多参数版本,而且如果反引号内的命令很复杂的话,shell(通常是/bin/sh)就会被自动启动并用来解释该命令;使用单引号时即便不用变量捕获其输出,Perl依然会浪费力气地获取其输出结果;此外,反引号内的程序会继承Perl的标准输入和输出,因此,其错误信息输出会被送往当前标准输出,也会在需要时从当前标准输入等待输入信息,而这些命令不是由当前用户自己启动,因此用户可能会在看到这些信息时迷惑不解;因此,慎用反引号;

8、  如果反引号中程序的输出有许多行,那么在标量上下文会返回成一个长字符串,而在列表上下文会返回由各行输出组成的列表;

9、  如前面的执行方式,处理同步进程的方法都是由Perl 掌控全局:启动一个命令,然后等着它结束,或许还会获取其输出;不过,Perl也可以启动子进程,直到结束之前,它们都会持续和Perl交换信息;要启动并发子进程,需要将命令放在open 调用的文件名部分,并且在它前面或者后面加上竖线符号“|”,这种方法即将进程视为文件句柄,也称为管道式打开;如:

     open DATE, “date|” or die  “Cannot pipe from date: $!”;

     open MAIL, “|mail  merlyn” or die “Cannot pipe to mail: $!”;

   竖线符号在右边表示该命令执行时它的标准输出会连接到供程序读取的相应句柄,于是第一个例子就像在shell中输入 date | your_program 一样;竖线符号在左边表示该命令的标准输入会连接到供程序写入的相应文件句柄,如第二例形如your_mail | mail Merlyn 命令;

10、              如此,想要从“以读取模式打开的文件句柄”中取得数据,只要采用正常的文件读取方式就可以了,如:my $now = <DATE>; 想传递数据给“以等待读入数据模式打开的文件句柄”进程,只要利用输出至文件句柄的print运算即可,如:print MAIL “The time is now $now”;  ;

Perl可以对Unix 以及其它系统上“管理进程用的低级系统调用”进行近乎直接的控制,如使用fork函数来创建进程;当调用fork函数时,如果是调用系统的fork 函数来创建一个新的进程,就是通过复制解释器来模仿它;调用fork函数时,如果调用成功,就会创建一个等同于父进程的子进程,该子进程继承了父进程的所有属性,比如环境变量;两个进程间的唯一差别在于fork调用的返回值,在子进程中,返回0,在父进程中,返回子进程的PID;如果fork 不成功,会返回undef;

Learning_Perl_Student_Workbook(2nd,2012.01) Learning_Perl_Student_Workbook(2nd,2012.01) 英文pdf格式. 立即下载

相关推荐

learning perl

learning perl,很不错的一本perl入门书籍

perl学习资源

perl学习资源:perl文档、FAQ社区、perl参考书籍。

第七宇林的博客 643

Learning Perl Student Workbook

brian d foy is a prolific Perl trainer and writer, and runs The Perl Review to help people use and understand Perl through educational, consulting, code review, and more. He's a frequent speaker at Perl conferences. He's the co-author of Learning Perl and Intermediate Perl and the author of Mastering Perl. He was been an instructor and author for Stonehenge Consulting Services from 1998 to 2009, a Perl user since he was a physics graduate student, and a die-hard Mac user since he first owned a computer. He founded the first Perl user group, the New York Perl Mongers, as well as the Perl advocacy nonprofit Perl Mongers, Inc., which helped form more than 200 Perl user groups across the globe. He maintains the perlfaq portions of the core Perl documentation, several modules on CPAN, and some stand-alone scripts.

Learning Perl(Perl语言入门)学习笔记(1)

第二章 标量数据 1、 一般来说,Perl用标量(Scalar)指称单件事物;2、 Perl中,所有数值的内部格式都相同,一律使用双精度浮点数进行运算;3、 直接量是Perl原程序中数值的表示形式,在非十进制的整数直接量表示中,八进制以0开头,十六进制以0x开头,而二进制以0b开头;4、 操作符**表示幂乘,如2的3次方为2**3;5、 字符串没有长度限制(0—∞);6

639

华为无线WiFi实战:基于802.1x与NPS的企业级认证部署指南

本文提供了一份详尽的华为无线WiFi企业级认证部署实战指南。通过整合802.1x协议与Windows NPS服务器,构建基于AD域账号的安全认证体系,彻底解决传统WiFi密码共享带来的安全风险。文章详细拆解了从NPS服务器配置、证书部署到华为AC端RADIUS模板、AAA方案、认证域及VAP模板调用的全流程,并附有终端连接测试与常见故障排查方法,助力企业实现高效、安全的无线网络接入管理。

weixin_29239661的博客 269

AltiumDesigner 高效封装库管理 -- samacsys插件实战指南

本文详细介绍了如何利用samacsys插件高效管理AltiumDesigner封装库。通过实战指南,指导用户完成插件安装、云端元件搜索与放置,并分享将海量资源整合为个人标准库的管理策略,从而大幅提升PCB设计效率与可靠性,杜绝封装错误。

weixin_28285943的博客 125

Perl Learning (1) —— Perl简介

小骆驼书( llama book ) Perl简介

delphiwcdj的专栏 1323

从解压到编译:手把手带你用TeXstudio搞定第一篇ACM LaTeX论文

本文详细指导如何使用TeXstudio从解压ACM LaTeX模板到成功编译第一篇学术论文的全过程。涵盖环境准备、模板配置、TeXstudio设置及常见问题排查,特别针对ACM会议论文格式要求,帮助学术新人快速掌握LaTeX写作技巧。

weixin_30655569的博客 254

Perl Learning (5) —— 输入与输出

I/O问题

delphiwcdj的专栏 4472

【SystemVerilog项目实践】4.AHB-SRAMC(验证计划)

验证计划

托马斯的博客 3660

IsaacGym四足机器人sim to real全过程详细解析(walk these ways方法)

本文使用强化学习的方法运行到Aliengo机器人上完成从训练到部署的全过程。该方法使用的是GO1机器人提供了完整的sim to real代码和遥控器控制代码,所以我们只需要重新训练和部署健康就可以使用在Aliengo上。该方法使用lcm进行通讯首先程序通过UDP和机器人控制板进行通讯获取机器人状态并下达指令。然后又通过lcm进行机器人状态信息的发布和模型命令的获取。

weixin_44061195的博客 2万+

Learning Perl(Perl语言入门)学习笔记(2)

 第三章  列表和数组 1、 列表和数组在Perl中用来表示复数;2、 列表(list)指的是标量的有序集合,数组(array)表示存储列表的变量;列表是数据,数组是变量,列表可以不放在数组中;3、 数组或列表的每个元素都是单独的标量变量,拥有独立的变量值,可以同时包含数字、字符串或undef,但使用时一般让其具有相同的类型;4、 索引计数从0开始,如果索引值是表达式,而结果不为整时会先取

501

5、模型预测控制与分布式MPC控制结构解析

本文深入解析了模型预测控制(MPC)中的双模式预测控制及其稳定性理论,并探讨了分布式MPC的不同控制结构。内容涵盖MPC的基本公式化、性能指标、优化问题以及相关算法步骤,同时比较了集中式MPC、单层分布式MPC和分层分布式MPC的优缺点和适用场景。最后通过流程图和表格形式总结了双模式MPC的算法步骤和控制结构选择思路,并提供了操作建议,以帮助在实际工业系统中更好地应用MPC技术。

tea88的博客 168

Windows 11安装Node.js全攻略:从版本选择到环境配置

Node.js作为JavaScript运行时,是前端工程化与后端服务开发的基石。在Windows 11系统中,正确安装并配置Node.js环境,往往涉及版本选择、PATH环境变量、包管理器等多重环节。很多人会被类似“node:9.4”的标签误导,其实那更可能是Docker镜像或Electron内置版本。理解Node.js的LTS版本机制与PATH原理,能有效避开“不是内部或外部命令”、“npm.ps1无法加载”等高频问题。通过nvm-windows管理多版本,配合npm国内镜像加速,可以显著提升开发效率。无

weixin_33938733的博客 247

【实战圣经】YOLOv8-pose姿态估计模型从训练到RK3588部署:让边缘端骨骼识别速度突破60FPS

本教程从“模型训练-转换-边缘部署”全链路拆解了YOLOv8-pose姿态估计方案在RK3588上的落地过程,每一步都经过实战验证。无论是智能健身的动作实时纠正,还是工业设备的关键部件姿态检测,这套流程都能让你以最低成本实现高精度、高实时性的姿态估计应用。如果你在实践中遇到模型转换报错、部署性能不达标等问题,可聚焦某一环节深入优化——毕竟,让AI在边缘端“精准捕捉每一个关键点”,才是技术驱动场景创新的核心。

m0_71589036的博客 251

学Simulink--基础微电网场景实例:基于Simulink的微电网并网/孤岛无缝切换控制仿真

本文完成了基于 Simulink 的微电网并网/孤岛无缝切换控制仿真,实现了:✅ 构建含双模式逆变器的微电网模型✅ 实现预同步 + Stateflow 逻辑的智能切换✅ 验证计划与非计划切换的性能边界✅ 证明“无缝”在工程上是可实现的。

amy_mhd的博客 102

Learning Perl(Perl语言入门)学习笔记(10)

第十一章  文件测试 1、  文件测试操作符及其含义:-r   文件或目录,对目前(有效的)用户或组来说是可读的;-w  文件或目录,对目前(有效的)用户或组来说是可写的;-x  文件或目录,对目前(有效的)用户或组来说是可执行的;-o  文件或目录,由目前(有效的)用户所拥有;-R  文件或目录,对实际的用户或组来说是可读的;-W 文件或目录,对实际的用户或组来说

511

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Learning Perl 7

1. 数组的长度 $#arrayname返回数组最后一个长度的下标。( 默认数组是从0下标开始) 2. 数组的切片Array slicing 从一个数组给另一个数组的元素赋值时,得出的数组称为数组片。如果右边的数组大于左边的数组时,未使用的值将放弃。如果小于,多出的左边的值将为undef。 例如: @name = ('A','B','C'); @pal = @n...

weixin_34055910的博客 102

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Perl Learning (3_1) —— 列表与数组

如果说Perl的标量代表的是单数(singular),那么在Perl里代表复数(plural)的就是列表和数组。

delphiwcdj的专栏 1573

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Perl Learning (2) —— 标量数据

一般来说,Perl用标量(scalar)来称呼单件事物。标量是Perl里面最简单的一种数据类型。

delphiwcdj的专栏 1630

learning perl第5章练习题

原文发表于网易博客 2010-11-16 13:39:42 learning perl第5章的练习题有点意料之外,虽然第5章讲的是基本输入输出,但是实现习题时,还是花了我一段时间用来去前面几个章节回顾了一下。呵呵,把数组知识也用进去了。 第1题: 1: #!perl -w 2: #tac 3: use strict; 4: ...

weixin_34123613的博客 96
上一篇: Learning Perl(Perl语言入门)学习笔记(12)
下一篇: Learning Perl(Perl语言入门)学习笔记(14)
Rebollo
博客等级 码龄18年 1粉丝 21原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值