显示标签为“Perl”的博文。显示所有博文
显示标签为“Perl”的博文。显示所有博文

Perl文章整理

Perl语言介绍 http://www.einverne.tk/2012/09/perl-introduction.html
Perl语言基本语法 http://www.einverne.tk/2012/09/perl-basic-syntax.html
Perl数组与哈希 http://www.einverne.tk/2012/09/perl-array-hash.html
Perl文件操作与函数 http://www.einverne.tk/2012/09/perl-file-operation-and-function.html
Perl模式匹配 http://www.einverne.tk/2012/10/perl-pattern-matching.html
http://www.einverne.tk/2012/11/perl.html
Perl复杂数据结构 http://www.einverne.tk/2012/11/perl-data-structure.html
Perl基本输入输出 http://www.einverne.tk/2012/11/perl-stdin.html
Perl模块 http://www.einverne.tk/2013/02/perl-modules.html

Perl练习 http://www.einverne.tk/2012/09/perl-exercise.html
Perl需要注意的问题 http://www.einverne.tk/2012/09/perl-attention.html

更多请查看Tag:Perl

Perl模块

一个很好的网站CPAN

标准爬虫
#程序功能:给定一个url,自动下载该网页的html
use Encode;
use HTTP::Request;
use LWP::UserAgent;
#给定要抓取的url
$Website='http://kjs.mep.gov.cn/hjbhbz/bzwb/hxxhj/xgjcffbz/index_1.htm';
$ua=new LWP::UserAgent();
$request=new HTTP::Request('GET',$Website);
$response=$ua->request($request);
$str=$response->content;
Encode::_utf8_on($str);
print encode("gb2312",$str);


#下载一个pdf文件
use HTTP::Request::Common;
use LWP::UserAgent;

$ua=new LWP::UserAgent();
$ua->timeout(100);

$url="http://kjs.mep.gov.cn/hjbhbz/bzwb/dqhjbh/jcgfffbz/201203/W020120410332725219541.pdf";
$filespec="W020120410332725219541.pdf";
$response = $ua->request(GET($url),$filespec);


动态程序设计(Perl)语言期末考试

提交要求:程序名和结果文件名按照题目要求命名,所有程序(不要原始数据,不要结果文件)打包到一个压缩文件,文件名命名按照“姓名-学号”格式,压缩包发到perl_*@163.com,本人需要确认发送成功。

一、(50分)编制perl程序1.pl, 给定一个英汉词典 ecdict.txt,该词典格式为:
#英文单词
词性1. 汉语译文1;汉语译文2..
词性2. 汉语译文1;汉语译文2..
#英文单词
词性1. 汉语译文1;汉语译文2..
词性2. 汉语译文1;汉语译文2..
…
请根据此词典,不考虑词性信息,生成一部汉英词典cedict.tx,词典中,以汉语译文为词条,以英文单词为译文,汉语词条汉字拼音序排列,其英文译文按照字母序排列,生成的格式为:
#汉语词1
英文译文1; 英文译文2…
#汉语词2
英文译文1; 英文译文2…
…
二、(50分)
     给定一个URL http://www.hao123.com 完成以下任务:
1)编制perl程序2_1.pl,自动下载该html页面,保存名为hao123.txt (10分)
2)编制perl程序2_2.pl,页面中超链接形式为href=”url”,统计该页面中包括该形式超链接的数目,数目输出到屏幕中(15)
3)编制perl程序2_3.pl,统计分类频道内,各个网站信息,用以下格式输出到文件info.txt中 (25)
#优酷网
Class:视频
…
URL: http://www.mmbang.com/
Class:其他

Perl产生随机数


Perl利用函数rand()和srand()为随机数(更确切的说是“伪随机数”)字符串的生成提供了基本的工具。这些函数不是利用加密来提供安 全性的,所以不要利用它们为你金融信息的加密。但是,如果你需要为你的下一个游戏或者动态Web网站的新特性设计一个简单的随机数生成器,那么 rand()和srand()可能就是你所需要的。
函数rand()是真正的随机数生成器,而srand()会设置供rand()使用的随机数种子。函数rand()会返回一个处于0和你所指定的数 值(缺省为1)之间的分数。如果你在第一次调用rand()之前没有调用srand(),那么系统会为你自动调用srand()。
要注意,使用同种子相同的数调用srand()会导致相同的随机数序列被生成。这在有的时候很方便,尤其在游戏编程里,你可能想要重复让随机事件按照精确的相同序列出现。
像下面这样使用rand():
print "Your lucky number for today is: " . int(rand(100) + 1) . " ";

指令:rand
语法:rand($interger)
说明:常和函数srand搭配来取得一随机数,如果没有先宣告stand函数的话,则取出的常数值是一个固定值。这个语法会返回一个介于0和$interger之间的数值,如果$interger省略的话,则会返回一个介于0和1 的数值。

示例:
srand; #要先宣告srand函数,才能产生随机数的效果
$int=rand(10); #$int的值会大于0而且小于10如果希望产生的乱数是整数的话,就要再加上int #这个函数
$int=int(rand(10)); #$int的值是一个整数,且值在0和9之间
--------------------------
$int=rand(10);
$int=int(rand(10));
print "int is $int\n";
运行:
int is 9
再次运行:
int is 7
#可见rand取的是随机数字

实例:我有一个7000行的文本数据,想每次从中随机提取1280行,提取100次,最后生成100个1280行的文本,该如何做?各位请指点。
#!/usr/bin/perl
use strict;
use warnings;
my $data_file = "file1";
print " Generating ...\n";
open FH, "$data_file" or die "Can not open the required file $data_file !";
my @data = <FH>;
close FH;
for (1..100) {
        my %hash;
        while ((keys %hash) < 1280) {
                 $hash{int(rand($#data))} = 1;
        }
        open OUT, ">random$_.txt" or die "Can not open the required file random$_.txt !";
        foreach (keys %hash) {
                 print OUT "$data[$_]";
        }
        close OUT;
}
print " Complete!\7";
参考资料:http://www.builder.com.cn/2004/0108/105066.shtml
                  http://blog.appleandroid.com/post/202/
                  http://bbs3.chinaunix.net/thread-1709378-1-5.html

源文档 <http://blog.sina.com.cn/s/blog_4af3f0d20100izou.html>

Perl基本输入输出

从STDIN输入
从标准输入设备读取数据是很容易的,我们已经从第一课上就使用<STDIN>操作符了。例如:
$name=<STDIN>;
在数组环境中,可把所有剩余的行作为一列表返回。如:
@name=<STDIN>;
此时,需要读入多行,然后再对各行分别处理。通常做法是:
while($_=<STDIN>){
chop($_);
#处理$_(每一行)
}
上述程序可简化为:
while(<STDIN>){
chop; #等同于chop($_)
处理$_(每一行)
}
因为$_是许多操作符的缺少变量。

从<>输入

读取输入的另一种方法是使用<>。<>是从Perl程序命令行所指定的文件中读取数据。例如有个文件名为pro1的程序:
#!/usr/bin/perl;
while(<>){
print $_;
}
在UNIX环境中运行:
pro1 file1,file2,file3
此时,将依次读入文件file1,file2,file3中的每一行,然后显示输出。

向STDOUT输出

Perl用print和printf向标准输出设备输出。
print操作符使用字串列表作为参数,依次把每个字符串发送给标准输出,在发送时不插入或改变任何字符。如:
print "网上学园"."欢迎您!" #打印"网上学园欢迎您!"
print 1+2,"你好" #打印"3你好"
printf操作符用于格式化输出,在C语言中有相同的功能。它使用一个参数表,第一个参数是格式控制字符串,它定义了如何打印其余参数。例如:

printf "%10s% 8d%8.2f\n",$a,$b,$c
它的打印结果为:10个字符宽度的$a,空格,8个字符宽度的整数$b,8个字符宽度且包含两位小数的浮点数$c,最后换行。
注意:与前面操作符相类似,printf()的括号可以省略。

Ubuntu下批量添加用户

今天终于再一次感受到Google 的优势,搜出来的第一篇文章就直接能够实现我的效果,之前一个老师用百毒查半天没有解决。

Ubuntu自带工具批量添加用户


我们知道一般批量建立用户多是通过shell script,由于许多人没有编程基础,所以用网上查找的脚本批量添加用户遇到了很多麻烦,Linux联盟网站上收集了许多这样的脚本,熟练的用户可以去查找,本文主要是借助Ubuntu Linux自带的工具直接批量添加用户,不需要编写shell脚本批量添加用户帐户的方法。
Ubuntu中自带的工具是newusers 和chpasswd,下边我们通过范例配合newusers和chpasswd命令逐步讲解:

第一步我们需要在文本编辑器中按照/etc/passwd的格式录入帐户信息,我们采用gedit编辑器

sudo gedit /root/account.txt

然后在打开的编辑器中输入相应的内容

student001:x:601:601::/home/sutdent001:/bin/bash

student002:x:602:602::/home/sutdent002:/bin/bash

……..以下内容省略

第二步我们使用newusers命令添加用户,(要以ROOT用户登陆)

sudo newusers</root/account.txt

如果执行过程中没有出现错误信息,我们查看passwd文件和home目录应该已经出现了相应的信息。

第三步执行:

sudo pwunconv

将/etc/shadow产生的shadow密码译码,然后写回/etc/passwd,同时删除shadow文件中的密码字段,取消shawdow密码功能

第四步是建立密码表,以支持chpasswd命令,以下是范例:

sudo gedit /root/password.txt

student001: 4dtgdas

sutdent002: df3456d

………以下省略

第五步将密码倒入相应的文件:

sudo chpasswd</root/password.txt

如果执行没有出现错误,那就会在/etc/passwd文件中以明文显示密码。

最后一步是将passwd的明文密码用pwconv命令编译为shadow文件,这样原来passwd文件中的明文密码将会被x取代。

Sudo pwconv

完毕……

我们知道一般批量建立用户多是通过shell script,由于许多人没有编程基础,所以用网上查找的脚本批量添加用户遇到了很多麻烦,Linux联盟网站上收集了许多这样的脚本,熟练的用户可以去查找,本文主要是借助Ubuntu Linux自带的工具直接批量添加用户,不需要编写shell脚本批量添加用户帐户的方法。

引用:1 2

Quote Of The Day