perl的一些基本用法

perl的一些基本用法
perl的一些基本用法

perl基本用法2010-02-10 09:50s/\s+/ /g 将空白符变成一个空格;s/^\s+// 去掉首空白;s/\s+$// 去掉尾空白;s/^\s+|\s+$// 去掉首尾空白;大小写转化的例子:s/(fred|barney)/\U$1/gi 匹配所有的忽略大小写,替换成大写;s/(fred|barney)/\L$1/gi 匹配所有的忽略大小写,替换成小写;s/(\w+) (\w+)/\U$2\E$1/i $2变成大写 $1还是保持小写,\E结束转换;CPAN 是 Comprehensive Perl Archive Network 的缩写,中译为 Perl 综合典藏网。它包含了极多用 Perl 写成的软件和模块。CPAN相关软件的安装方法最近几天安装SPAMASSASSIN,牵涉到许多CPAN的安装,以前都是缺少什么,就去CPAN网站寻找相应的模块,自己编译安装,后来发现其实CPAN自己的shell命令就可以很方便的安装相应模块,真是方便当然前提你必须安装perl-CPAN,在我的redhat9.0上的版本是perl-CPAN-1.61-88,大家没装的话,直接用光盘的rpm包安装即可。安装后运行[root@www CPAN]# perl -MCPAN -e shellcpan shell -- CPAN exploration and modules installation (v1.61)

ReadLine support available (try 'install Bundle::CPAN')cpan>进入cpan的shell,好了,我为了安装spamassassin,需要安装以下几个install Digest::SHA1

install HTML::Parser

install Storable

install DB_File

install Net::DNS

install Net::SMTP

install Mail::SPF::Query

install IP::Country::Fast

install IO::Socket::SSL

install Time::HiRes

install DBI是不是很方便呀,不用再单独下载编译安装了,

类型字符例子用于哪种名字

标量 $ $cents 一个独立的数值(数字或字串)

数组 @ @large 一列数值,用编号做键字

散列 % %interest 一组数值,用字串做键字

子过程 & &how 一段可以调用的 Perl 代码

类型团 * *struck 所有叫 struck 的东西

手册页内容

perl 有些什么 perl 手册页

perldata 数据类型

perlsyn 语法

perlop 操作符和优先级

perlre 正则表达式

perlvar 预定义变量

perlsub 子过程

prelfunc 内建函数

perlmod 如何令 Perl 模块工作

perlref 参考手册

perlobj 对象

perlipc 进程间通讯

perlrun 如何运行 Perl 命令,以及命令行开关

perldebug 调试

perldiag 诊断信息

% perlop comma% perlfunc split% perlvar ARGV% perldiag 'assigned to typeglob' % perlfaq roundperltoc 命令(自己也是一个手册页)搜索所有手册页收集的目录

% perltoc typeglob perl5005delta: Undefined value assigned to typeglob perldata: Typeglobs and Filehandles perldiag: Undefined value assigned to typeglob 或者搜索全部 Perl 在线文档,包括所有头,描述,和例子,对于任何字串的实例,使用 perlhelp 命令: % perlhelp CORE::GLOBAL参阅 perldoc 手册页获取细节。

手册页内容

perlfaq1 关于 Perl 的通用信息

perlfaq2 获取和学习 Perl

perlfaq3 编程工具

perlfaq4 数据操作

perlfaq5 文件和格式

perlfaq6 正则表达式

perlfaq7 通用 Perl 语言信息

perlfaq8 系统交互

perlfaq9 网络

手册页内容

perlamiga Amiga 移植

perlcygwin Cygwin 移植

perldos MS-DOS 移植

perlhpux HP-UX 移植

perlmachten Power MachTen? 移植

perlos2 OS/2 移植

perlos390 OS/390 移植

perlvms DEC VMS 移植

perlwin32 MS-Windows 移植比较数字字串返回值

等于 == eq 如果 $a 等于 $b 返回真

不等于 = ne 如果 $a 不等于 $b 返回真

小于 < lt 如果 $a 小于 $b 返回真

大于 > gt 如果 $a 大于 $b 返回真

小于或等于 <= le 如果 $a 不大于 $b 返回真

比较 <=> cmp 相等时为 0,如果 $a 大为 1 如果 $b 大为 -1

例子名字结果

-e $a 存在如果在 $a 中命名的文件存在则为真

-r $a 可读如果在 $a 中命名的文件可读则为真

-w $a 可写如果在 $a 中命名的文件可写则为真

-d $a 目录如果在 $a 中命名的文件是目录则为真

-f $a 文件如果在 $a 中命名的文件是普通文件则为真

-T $a 文本文件如果在 $a 中命名的文件是文本文件则为真名字 ASCII 定义代码

空白 [\t\n\r\f] \s

词 [a-zA-Z_0-9] \w

数字 [0-9] \d还有一件你必须知道的事情,缺省时量词作用在它前面的单个字符上,因此/bam{2}/ 将匹配“bamm”而不是“bambam”。如果你要对多于一个字符使用量词,你需要使

用圆括弧,因此为了匹配“bambam”需要使用 /(bam){2}/。

构造含义

$days 简单标量值 $days

$days[28] 数组 @days 的第二十九个元素

$days{'Feb'} 散列 %days 的“Feb”值

构造含义

${days} 和 $days 一样,不过在字母数字前面不易混淆

$Dog::days 在 Dog 包里面的不同的 $days 变量

$#days 数组 @days 的最后一个索引

$days->[28] $days一个引用指向的数组的第二十九个元素

$days[0][2] 多维数组

$days{200}{'Feb'} 多维散列

$days{2000,'Feb'} 多维散列枚举

构造含义

@days 包含($days[0],$days[1],...$days[n])的数组

@days[3,4,5] 包含($days[3],$days[4],$days[5])数组片段的数组@days[3..5] 包含($days[3],$days[4],$days[5])数组片段的数组@days{'Jan','Feb'} 包含($days{'Jan'},$days{'Feb'})片段的散列构造含义

%days (Jan=>31,Feb=>$leap?29:28,...)

代码含义

\n 换行符(常作LF)

\r 回车(常作CR)

\t 水平制表符

\f 进纸

\b 退格

\a 警报(响铃)

\e ESC字符

\033 八进制的ESC

\x7f 十六进制DEL

\cC Control-C

\x{263a} Unicode(笑脸)

\N{NAME} 命名字符

代码含义

\u 强迫下一个字符为大写(Unicode里的“标题”)

\l 强制下一个字符小写

\U 强制后面所有字符大写

\L 强制后面所有字符小写

\Q 所有后面的非字母数字字符加反斜杠

\E 结束\U,\L,或\Q。

常用通用含义替换

' ' q// 文本字串否

" " qq// 文本字串是

` ` qx// 执行命令是

() qw// 单词数组否

// m// 模式匹配是

s/// s/// 模式替换是

y/// tr/// 字符转换否

" " qr// 正则表达式是

#! /usr/bin/perl

@lines= `perldoc –u –f atan2`; # 反引号`通常在美式键盘数字1 的左边。不要和单引号‘混淆了

foreach(@lines){

s/\w<([^>]+)/\U$1/g;

print;

}

chomp() 这个函数是去到\n 的,如果两个\n只去掉一个。pop 是在数组的结尾,弹出

push 是在数组的结尾,压入。shift 是在数组的开头,弹出

unshift 是在数组的开头,压入reverse 逆转

子程序返回值为最后一个被计算的表达式。

在if 代码块内部,其语句没有分号。Perl 允许省略括号中最后一条语句的分号,在实际代码中,通常仅当此代码块仅包含一条语句时才省略此分号本书重点

my ($num) = @_; #列表context,同($sum) = @_;此为特殊列表,表内只有一个变量

my $num = @_; #标量context ,同$num = @_;

例如 @_=qw(a b c d e f g)

还有补充就是 ($num)里得到的是值为a

$num里得到的是@_的个数为7记住,如果没有使用括号,my 仅定义一个变量◆

my $first,$second 没有定义$second

my ($first,$second) 两个都定义了.

$#name 是name这个数组的最后一个索引

#@name 是对数组name进行索引行输入操作在到达文件的结尾时将返回undef ,这对于从循环退出时非常方便的

while (defined($line=)){

print "I saw $line";

}

可简写

while (){

print "I saw $_";

}在进行深入讨论前,我们要澄清一些事:这种简写只在特定的情况下有效,默认的情况下不会将一行读入变量$_。仅当while

循环的条件判断部分只包含行输入操作才有效◆。如果在条件判断部分还有别的内容,则上述简写无效。这是Unix 中很少人知道的一个事实:如许多标准的工具,如cat ,sed ,也使用这种约定,连接号(-)代表标准输入流。如果在第二次使用<>之前重新初始化@ARGV ,则能得到正确的结果

@ARGV 是一个数组,但是好像是perl 内定的一个数组.

如果需要更多的这种选项,那很可能你是使用模块按照标准方法处理它们。参看Getopt::Long 和Getopt::Std 这两个模块,它们属发布的Perl 中的一部分于标准print

@array; #打印出元素的列表

print “@array”;#打印一个字符串(包含一个内插的数组)

第一个语句打印出所有的元素,一个接着一个,其中没有空格。第二个打印出一个元素,它为@array 的所有元素,其被存

在一个字符串中。也就是说,打印出@array 的所有元素,并由空格分开◆。如果@array 包含qw /fred barney betty /◆,则

第一个例子输出为:fredbarneybetty ,而第二个例子输出为fred barney betty (由空格分开)Perl 在内插数组时,它会在元素之间加入空格。

如果字符串包含了换行符 print @arrey;

如果字符串没有换行符 print "@arrey\n";事实上,Perl Power Tools (PPT)项目的目标是将所有传统的Unix 工具在Perl 中实现,它们几乎实现了所有的工具(包括大多数的游戏),

当在如何实现shell 时被难住了。PPT 项目是成功的,因为在大多数non-UNIX 系统中实现了标准的Unix 工具。\d 任意数字 [0-9]

\D 除数字外的任意字符 [^0-9]

\w 任意单词字符 [_0-9a-zA-Z]

\W 任意非单词字符 [^_0-9a-zA-Z]

\s 空白 [ \r\t\n\f]

\S 非空白 [^ \r\t\n\f]

g 匹配所有可能的模式

i 忽略大小写

m 将串视为多行

o 只赋值一次

s 将串视为单行

x 忽略模式中的空白因此.*将匹配任意字符任意多数

但是.不匹配换行符

这里提到的三个变量名为:$&, $`, $'

if(“Hello there, neigbor”=~ /\S(\w+),/){

print “That actually matched ‘$&’.\n”;

}匹配的部分是“there,”(空格,单词,和一个逗号)。变量$1 中的值为there ,而$&为整个被匹配的部分。

匹配部分的前一部分存放在$`之中,后一部分被存到$'。另一种说法是,$`中含有正则表达式引擎在匹配成功前所找到的变

量,而$'为此模式还没有匹配的剩余部分。如果将这三个变量放在一起,你将得到原始字符串:

if (“Hello there, neighbor”=~ /\S(\w+),/){

pirnt “That was ($`)($&)($’)”;

}

输出的消息为(Hello)( there,)( neighbor),为这三个自动匹配变量的值。三个变量的值可能是空的,和之前数字匹配变量的例

子一样。它们和数字匹配变量有相同的作用域。通常,在下次成功匹配前其值不变。现在,我们讨论我们之前说的“免费”问题。是的,自由是要代价的。这里的代价是,如果你使用了这三个自动匹配变量

中的任意一个,无论在程序的什么地方,其它地方的正则表达式的运行数度会变慢一些。虽

然,变慢的程度不大,但已经

足够让人担忧,因此许多Perl 程序员从不使用这些自动匹配变量◆。相反的,使用的替代的方法。例如,如果需要使用$&,那么在整个模式上加上括号,并使用$1 代替。

这些在替换中出现的大小写转换的修饰符,也可在双引号中使用:

print “Hello, \L\u$name\E, would you like to play a game?\n”;

默认时,split 对$_操作,模式为空白:

my @fields = split; #同split /\s+/, $_;my @values = split /:/, $x; #@values 为(4, 6, 8, 10, 12)

my $z =join “-”, @values; #$z 为“4-6-8-10-12”

split 和join 可以一起使用,但不要忘了join 的第一个参数是字符串,而非模式我们将整个文件读入一个变量之中

open FILE, $filename

or die “Can’t open ‘$filename’: $!”; #如果打不开文件,出提示打不开的原因

my $lines = join '', ;

$lines =~ s/^/$filename: /gm;这是?号在正则表达式中的第四种用法:问号,表示0 或1 的数量词,非贪婪修饰符,现在是开头符?:unless ($mon =~ /^Feb/){

print “This month has at least thirty days.\n”;

}else{

print “Do you see what’s going on here?\n”;

}同下面if($mon =~ /^Feb/){

print “Do you see what’s going on here?\n”;

}else{

print “This month has at least thirty days.\n”;

}Pascal 程序员应当小心:在Pascal 中,重复的until 语句至少要执行一次迭代,但Perl 中的until 循环可能一次也不执行,如果循环执行前的条件表达式的值为真。print “$n is a negative number.\n”if $n<0;

同下面

if($n < 0){

print “$n is a negative number. \n”;

}还有一些其它的修饰语:

&error(“Invalid input”) unless &valid($input);

$i *= 2 unitl $i > $j;

print “”, ($n += 2) while $n <10;

&greet($_) foreach @person;Perl 没有像C 语言“switch ”结构中的“fall-through (直接跳入)”下一个代码块的功能

for

这三个部分(初始化,条件判断,步长)的任意部分均能为空,但分号不能省略。前面三个操作符&&, || , ?:,均有一个共同的特殊性质:根据左侧的值(true 或false ),来判断是否执行右侧代码。&&表示,如果左面的值为真,则执行右侧的代码,

||表示左面的值为假时,则执行右侧的代码。

===================================================================

foreach(1..10){

print “Iteration number $_.\n\n”;

print “Please choose: last, next, redo, or none of the above?”;

chomp(my $choice = );

print “\n”;

last if $choice =~ /last/i;

next if $choice =~ /next/i;

redo if $choice =~ /redo/i;

print “That was’t any of the choices… onward!\n\n”;

}

print “That’s all, folks\n”;

============================================================

| 文件检测选项及其含义 |

============================================================检测选项含义

-r 文件或目录对此(有效的)用户(effective user )或组是可读的

-w 文件或目录对此(有效的)用户或组是可写的

-x 文件或目录对此(有效的)用户或组是可执行的

-o 文件或目录由本(有效的)用户所有

-R 文件或目录对此用户(real user)或组是可读的

-W 文件或目录对此用户或组是可写的

-X 文件或目录对此用户或组是可执行的

-O 文件或目录由本用户所有

-e 文件或目录名存在

-z 文件存在,大小为0 (目录恒为false )

-s 文件或目录存在,大小大于0 (值为文件的大小,单位:字节)

-f 为普通文本

-d 为目录

-l 为符号链接

-S 为socket

-p 为管道(Entry is a named pipe(a “fifo”))

-b 为block-special 文件(如挂载磁盘)

-c 为character-special 文件(如I/O 设备)

-u setuid 的文件或目录

-g setgid 的文件或目录

-k File or directory has the sticky bit set

-t 文件句柄为TTY(系统函数isatty()的返回结果;不能对文件名使用这个测试)

-T 文件有些像“文本”文件

-B 文件有些像“二进制”文件

-M 修改的时间(单位:天)

-A 访问的时间(单位:天)

-C 索引节点修改时间(单位:天)

=========================================================================

my @all_files = <*>; ##基本上同@all_files = glob “*”一样;my @files = ; ##glob

my @lines = ; ##文件句柄读入

my $name = “FRED”;

my @files = <$name/*> ##glob如果需要,可以使用readline 得到间接文件句柄读入的操

作my $name = “FRED”;

my @lines = readline FRED; #从FRED 读入

my @lines = readline $name; #从FRED 读入(使用opendir 而非open ),从中读入(使用readdir 而非readline ),关闭(使用closedir 而非close )。不是读入文件的内容,而是将一个目录中的文件名(以及一些其它东西)读入,如下例:

my $dir_to_process = “/etc”;

opendir DH, $dir_to_process or die “Cannot open $dir_to_process: $!”;

foreach $file(readdir DH) {

print “one file in $dir_to_process is $file\n”;

}

closedir DH;◆某些人知道rm 通常会提示你是否删除这一类的文件。但rm 是一个命令,而unlink 是系统调用。系统调用从不询问权限,它们也从不道歉说自己错了。◆这不是唯一的一个经常询问的问题;怎样一次将一批文件重命名是在这些新闻组中最常问的。这也是在大多数新闻组的FAQ 中,这通常

是第一个回答的问题。直到现在,它仍然占据第一的位置。

foreach my $file (glob “*.old”){

my $newfile = $file;

$newfile =~ s/\ .old$/.new/;

if (-e $newfile){

warn “can’t rename $file to $newfile: $newfile exists\n”;

}elsif(rename $file, $newfile){

##成功,什么也不做

} else {

warn “rename $file to $newfile failed: $!\n”;

}

}要找出符号连接指向的地方,使用readlink 函数。它会告诉你符号连接指向的地方,如果参数不是符号连接其返回undef :

my $where = readlink “carroll ”; #得到“dodgson”

my $perl = readlink “/usr/local/bin/perl”#可能得到Perl 放置的地方my $name = “fred”;

my $permissions = “0755”; #危险…不能工作

mkdir $name, $permissions;mkdir $name, oct($permissions);你可以使用chown 函数改变一批文件的所有者及所在的组my $now = time;

my $ago = $now -24*60*60; #一天的秒数

utime $now, $ago, glob “*”; #设成当前访问的,一天之前修改的my $stuff = “Howdy world!”;

my $where1 = index($stuff, “w”); #$where1 得到2

my $where2 = index($stuff, “w”, $where+1); #$where 得到6

my $where3 = index($stuff, “w”, $where+1); #$where 为-1(没有找到)my $fred = “Yabba dabba doo!”;

my $where1 = rindex($fred, “abba”); #$where1 得到7

my $where2 = rindex($fred, “abba”, $where - 1); #$where2 得到1

my $where3 =rindex($fred, “abba”, $where2-1); #$whrere3 得到-1$part = substr($string, $initial_position, $length);

它有三个参数:一个字符串,一个从0 开始编号的初始位置(类似于index 的返回值),以及子串的长度。返回值是一个子串:

my $rock = substr “Fred J. Flintstone”, 13, 1000; #得到“stone”在上例中,如果请求的长度(例子中为,1000 )超过了字符串的长度,Perl 不会有任何抱怨信息,但得到的是一个比你所希望的更短的结果。如果想明确要求到达字符串的结尾处,无论其或长或短,可以像下例那样省略掉第三个参数(参数):

my $pebble = substr “Fred J. Flintsone”, 13; #得到“stone”初始位置可以是负的,表示从字符串结尾处开始(此时,-1 表示最后一个字符)◆。在下例中,位置-3 表示倒数第三个字

符的位置,也就是字符i 的位置:my$ $long = “some very very long string”;

my $right = substr($long, index($long, “l”));my $string = “Hello, world!”; substr($string, 0, 5) = “Goodbye”; # $string 现在变成了“Goodbye, world!”除了给substr 赋值外(第一次看起来有些怪异),也可以用更传统的方法◆来使用susbtr :使用4 个参数,第四个参数是替

换的字符串:

◆按照惯例,我们的意思是“函数调用”的观点,而不是“Perl ”的观点,因为这个功能在Perl 的早期就有了。

my $previous_value = substr($string, 0, 5, “Goodbye”);sub big_money {

my $number = sprintf “%.2f”, shift @_;

#在do-nothing 循环中,每一次加入一个逗号

1 while $number =~ s/^(-?\d+) (\d\d\d)/$1,$2/; (#这个1,这是没有用的。顺便提一句,Perl 会优化这个常值表达式,使之不占用任何运行时间。)

#将美元符号放入合适的位置

$number =~ s/^(-?)/$1\$/;

$number;

}要使用一个排序子程序,将它(不使用&)放在关键字sort 和你要排序的列表之间。这个例子将一列数字按照数字顺序将

其排序,并将结果放入@result 中:

my @result = sort by_number @some_numbers;sub by_number {$a <=> $b } 比较数字sub by_char {$a cmp $b } 比较字符my @numbers = sort { $a <=> $b } @some_numbers;my @descending = reverse sort { $a <=> $b } @some_numbers;这里有一个技巧。比较操作符(<=>和cmp )是很“近视的”,它们不知道哪一个操作数是$a ,哪一个是$b 。它们只知道哪

一个值在左边,哪一个在右边。如果$a 和$b 交换位置,比较操作符每一次得到的结果则是相反的。这意味着另一种得到逆

序的方式:my @descending = sort {$b <=> $a } @some_nubmers;

因为reverse 被当作sort 的一个修饰符,特殊的简写方式阻止你使用一种方式排序但得到的却是另一种结果。

==============================================================

my %score = (“barney”=>, “fred”=>205, “dino”=> 30);

my @winners = sort by_score keys %score;

实际上并不能根据score 对hash 进行排序;这只是文字上的简写。你不能对hash 排序。我们在前面的hashes 中使用sort时,只是对hash 的keys 排序(按照字母表顺序(ASCIIbetical)排序)。现在我们将对hash 的keys 排序,其顺序由其对应的

hash 中的值决定。此时,结果是根据保龄球的成绩这三人的名字的有序列表,。

写出这个排序子程序是非常容易的。我们需要的是针对score 而不是名字,使用数字比较。不是比较$a 和$b(选手的名字),我们想比较$score($a)和$score($b)(它们的成绩)。如果你这样思考,答案则呼之欲出,如下:

sub by_socre { $score{$b} <=> $score{$a}}让我们仔细的分析它,看看它是如何工作的。想象第一次调用它时,Perl 给$a 赋值barney ,给$b 赋值fred 。比较是$score{“fred”} <=> $score{“barney”},它是(通过hash 得到)205 <=>195 。<=>是“近视的”,因此它发现205 在195 之前,则说:“不,这不是正确的顺序;$b 应当在$a 之前。这告诉Perl fred 应当在barney 之前。可能下一次调用子程序时,$a 是barney ,而$b 是dino 。“近视的”数字比较符看到的是30<=>195 ,因此报告它们是正确的顺序:$a 确实是在$b 之前。因此,barney 在dino 之前。此刻,Perl 有了足够的信息来得到列表的顺序:fred 是胜利者,barney第二名,而dino 第三。

为什么比较运算中$score{$b}在$score{$a}之前,而非别的方式?因为我们想按保龄球成绩的降序排列,从最高成绩依次向

下。你可以(经过一些训练)一眼就能读懂这些代码:$score{$b} <=> $score{$a}的意思是根据score ,将它们按照数字逆序

排序。

my %score = {

“barney”=>95, “fred”=> 205,

“dino”=>30, “bam-bamm”=> 195;

};

bam-bamm 和barney 的成绩相同。哪一人应该排在前面呢。

my @winners = sort by_score_and_name keys %score;

sub by_score_and_name {

$score{$b} <=> $score{$a} #按照降序的成绩

or

$a cmp $b; #字母顺序的名字

}

============================================================================ system ‘ls –l $HOME’;

我们这里将双引号变成了单引号,因为$HOME 是一个shell 变量。否则,shell 看不到美元符号,因为Perl 会将它用值进行替换。当然,我们也可以这样写:

system “ls –l \$HOME”;system‘for i in *; do echo = = $i = =; cat $i; done’; 这里,我们也是使用的单引号,因为需要美元符号对shell 有含义,而对Perl 没有。双引号允许Perl 用当前的值来替换$i而不是让shell 用它自己的值来代替。顺便说一句,这个小的shell 脚本会遍历当前目录下所有的普通文件,输出每一个文

件的名字和内容;如果不相信,你可以尝试一下。因此@name[2, 5]的含义同($names[2], $name[5])一样$- 当前页可打印的行数,属于Perl格式系统的一部分

$! 根据上下文内容返回错误号或者错误串

$”列表分隔符

$# 打印数字时默认的数字输出格式

$$ Perl解释器的进程ID

$% 当前输出通道的当前页号

$& 与上个格式匹配的字符串

$( 当前进程的组ID

$) 当前进程的有效组ID

$* 设置1表示处理多行格式.现在多以/s和/m修饰符取代之. $, 当前输出字段分隔符

$. 上次阅读的文件的当前输入行号

$/ 当前输入记录分隔符,默认情况是新行

$: 字符设置,此后的字符串将被分开,以填充连续的字段. $; 在仿真多维数组时使用的分隔符.

$? 返回上一个外部命令的状态

$@ Perl解释器从eval语句返回的错误消息

$[ 数组中第一个元素的索引号

$\ 当前输出记录的分隔符

$] Perl解释器的子版本号

$^ 当前通道最上面的页面输出格式名字

$^A 打印前用于保存格式化数据的变量

$^D 调试标志的值

$^E 在非UNIX环境中的操作系统扩展错误信息

$^F 最大的文件捆述符数值

$^H 由编译器激活的语法检查状态

$^I 内置控制编辑器的值

$^L 发送到输出通道的走纸换页符

$^M 备用内存池的大小

$^O 操作系统名

$^P 指定当前调试值的内部变量

$^R 正则表达式块的上次求值结果

$^S 当前解释器状态

$^T 从新世纪开始算起,脚步本以秒计算的开始运行的时间$^W 警告开关的当前值

$^X Perl二进制可执行代码的名字

$_ 默认的输入/输出和格式匹配空间

$| 控制对当前选择的输出文件句柄的缓冲

$~ 当前报告格式的名字

$` 在上个格式匹配信息前的字符串

$’在上个格式匹配信息后的字符串

$+ 与上个正则表达式搜索格式匹配的最后一个括号

$< 当前执行解释器的用户的真实ID

$ 含有与上个匹配正则表达式对应括号结果

$= 当前页面可打印行的数目

$> 当前进程的有效用户ID

包含正在执行的脚本的文件名

$ARGV 从默认的文件句柄中读取时的当前文件名

%ENV 环境变量列表

%INC 通过do或require包含的文件列表

%SIG 信号列表及其处理方式

@_ 传给子程序的参数列表

@ARGV 传给脚本的命令行参数列表

@INC 在导入模块时需要搜索的目录列表

$-[0]和$+[0] 代表当前匹配的正则表达式在被匹配的字符串中的起始和终止的位置。

Json数据格式的使用方法入门教程

JSON 数据格式解析 和 XML 一样,JSON 也是基于纯文本的数据格式。由于 JSON 天生是为JavaScript 准备的,因此,JSON 的数据格式非常简单,您可以用 JSON 传输一个简单的 String,Number,Boolean,也可以传输一个数组,或者一个复杂的Object 对象。 String,Number 和 Boolean 用 JSON 表示非常简单。例如,用 JSON 表示一个简单的 String “ abc ”,其格式为: "abc" 除了字符 ",\,/ 和一些控制符(\b,\f,\n,\r,\t)需要编码外,其他 Unicode 字符可以直接输出。下图是一个 String 的完整表示结构: 图 1. String 的完整表示结构 一个 Number 可以根据整型或浮点数表示如下:

图 2. Number 的表示结构 这与绝大多数编程语言的表示方法一致,例如: 12345(整数) -3.9e10(浮点数) Boolean 类型表示为 true 或 false 。此外,JavaScript 中的 null 被表示为 null,注意,true、false 和 null 都没有双引号,否则将被视为一个String 。 JSON 还可以表示一个数组对象,使用 [] 包含所有元素,每个元素用逗号分隔,元素可以是任意的 Value,例如,以下数组包含了一个 String,Number,Boolean 和一个 null: Object 对象在 JSON 中是用 {} 包含一系列无序的 Key-Value 键值对表示的,实际上此处的 Object 相当于 Java 中的 Map,而不是Java 的 Class 。注意 Key 只能用 String 表示。 例如,一个 Address 对象包含如下 Key-Value:

Linux操作系统基础教程

Linux操作系统基础教程 清华大学信息学院计算机系 目录 前言 (2) 第一讲 Linux基础 (2) 一.什么是Linux? (2) 二.安装Linux的好处? (3) 三.如何得到Linux? (3) 四.如何得到Linux的最新消息? (3) 五.Linux操作系统上有什么应用? (4) 六.在那里可以找到讨论区? (5) 七.安装过程 (5) 第二讲 Linux基础进阶 (5) 一.Linux的文件系统结构 (6) 二. 文件类型 (7) 三.Linux基本操作命令 (8) 四.基本的系统管理命令 (14) 五.关於 Process 处理的指令 (16) 六. 关於字串处理的指令 (17) 七. 网路上查询状况的指令 (17) 八. 网路指令 (18) 九. 关於通讯用的指令 (21) 十. 编译器( Compiler ) (22) 十一. 有关列印的指令 (22) 第三讲 Linux下的网络服务,配置问题和常用工具 (24) 一.Linux下的网络服务 (24) 二.几种重要的配置文件 (26) 三.Linux下常用的工具软件 (28) 尾语 (31)

前言 Linux是在1991年发展起来的与UNIX兼容的操作系统,可以免费使用,它的源代码可以自由传播且可任人修改、充实、发展,开发者的初衷是要共同创造一个完美、理想并可以免费使用的操作系统。 我们并不能使同学们通过这次系列讲座成为一个UNIX类操作系统的高手,这次系列讲座的目的就是在同学们中间普及Linux基础知识,为今后我们更加接近的了解Linux做一个好的开端。 第一讲 Linux基础 在这一讲中,我们主要是了解一下Linux的概况,以及对Linux有一个初步的感性认识。 一.什么是Linux? Linux是一个以Intel系列CPU(CYRIX,AMD的CPU也可以)为硬件平台,完全免费的UNIX兼容系统,完全适用于个人的PC。它本身就是一个完整的32位的多用户多任务操作系统,因此不需要先安装DOS或其他的操作系统(MS Windows, OS2, MINIX..)就可以进行直接的安装。Linux的最早起源是在1991年10月5日由一位芬兰的大学生Linux Torvalds (Torvalds@kruuna.helsinki.fi)写了Linux核心程序的0.02版开始的,但其后的发展却几乎都是由互联网上的Linux社团(Linux Community)互通交流而完成的。Linux不属于任何一家公司或个人,任何人都可以免费取得甚至修改它的源代码(source code)。Linux上的大部分软件都是由GNU倡导发展起来的,所以软件通常都会在附着GNU Public License(GPL)的情况下被自由传播。GPL是一种可以使你免费获得自由软件的许可证,因此Linux使用者的使用活动基本不受限制(只要你不将它用于商业目的),而不必像使用微软产品是那样,

在centOS6.5安装perl 5.16.3及其相应模块

在centOS6.5 上安装perl-5.16.3 鉴于本项目前端capture所依赖的perl模块等原因,试过perl-5.10.1和perl-5.20.1之后均未成功,而且在https://www.360docs.net/doc/a81386245.html,/查阅得知,以上版本对于模块NetPacket::SpanningTree的兼容性未知甚至不兼容(在perl-5.20.1上安装未成功),因此最终选择安装perl-5.16.3版本。 其步骤如下(参考来源: http://jianywww.virtualitworld.co.in/install-perl-5-18-0-in-centos-6-4/):Step 1: 进入root用户,在终端输入su,然后输入root密码。如果是第一次进入root用户,必须先设置root密码,linux系统版本之间各不一样,怕误导大家,请自行度娘。 Step 2: 首先下载perl-5.16.3的包,可以用wget 下载网址(我用的是https://www.360docs.net/doc/a81386245.html,/src/5.0/perl-5.16.3.tar.gz)

Step 3: 然后对其进行解压,解压命令: tar –xzvf perl-5.16.3.tar.gz(再输入perl的时候直接使用Tab键自动帮你补齐文件名) 解压完毕之后进入解压之后的文件夹,利用cd命令 Step 4: 进入解压之后的perl-5.16.3文件夹之后,执行configure命令,输入命令:./Configure –des (后面接你要安装的文件路径,/usr/local/perl 这是我用的)

Step 5: 配置完成之后,在终端输入make命令 Step 6: 在终端输入make test命令 Step 7: 如果所有的test都是成功,就输入make install安装了

PetaPoco入门

首页 - 网络编程 - https://www.360docs.net/doc/a81386245.html, PetaPoco入门(二) 2013-06-02 12:34:https://www.360docs.net/doc/a81386245.html,-冷月TinyHU- 关闭 关闭 点击数: 1949 1.Petapoco基本用法 1.1.创建示例工程 首先创建一个工程文件,为了便于展示数据这里创建一个类型为:WindowsApplication的工程文件。命名为:PetapocoTest。 程序最终布局及功能预览如下: 1.2.添加petapoco包 在项目文件的Reference上右键,选择“管理NuGet程序包”,并搜索Petapoco,安装之。 1.3.添加数据库连接 在app.config或web.config文件中添加数据库连接串。

下面是连接SQL Server: 下面是连接MySQL: 由于petapoco是与面向数据库无关的ORM组件,故对DB的增、删、改、查的代码与具体连接哪个物理数据库类型无关。 1.4.定义POCO-实体类 public class article { public long article_id { get; set; } public string title { get; set; } public DateTime date_created { get; set; } public bool draft { get; set; } public string content { get; set; } } 1.5.创建petapoco操作对象 接下来创建一个PetaPoco.Database对象。 var db=new PetaPoco.Database("DefaultConnection "); 1.6.查询数据 // 查询所有数据 foreach (var a in db.Query

("SELECT * FROM articles"))

python入门免费教程分享

python入门免费教程分享 通过Python入门爬虫比较简单易学,不需要在一开始掌握太多太基础太底层的知识就能很快上手,而且很快就能做出成果,非常适合小白一开始想做出点看得见的东西的成就感。你在学习Python?Python入门免费教程分享给你:python全新基础视频教程 https://https://www.360docs.net/doc/a81386245.html,/s/1i5kvG5f python课程教学高手晋级视频h ttps://https://www.360docs.net/doc/a81386245.html,/s/1htJW4KG python高级视频教程https://https://www.360docs.net/doc/a81386245.html,/s/1nvf3NOt 那么,你是否清楚Python工程师在企业里面的定位是什么?主要有四个重要的定位:验证算法、快速开发、测试运维、数据分析。 1、验证算法:就是对公司一些常见设计算法或者公式的验证,公式代码化。 2、快速开发:这个大家应该都比较熟悉,快速开发,就是用成熟框架,更少的代码来开发网站; 3、测试运维:做运维同学应该清楚,在Linux运维工作中日常操作涵盖了监控,部署,网络配置,日志分析,安全检测等等许许多多的方面,无所不包。python可以写很多的脚本,把“操作”这个行为做到极致。

与此同时,python在服务器管理工具上非常丰富,配置管理(saltstack) 批量执行( fabric, saltstack) 监控(Zenoss, nagios 插件) 虚拟化管理 ( python-libvirt) 进程管理(supervisor) 云计算(openstack) ...... 还有大部分系统C库都有python绑定。 4、数据分析:Python有三大神器:numpy,scipy,matplotlib,其中numpy很多底层使用C语言实现的,所以速度很快,用它参加各种数学建模大赛,完全可以替代r语言和MATLAB。spark,Hadoop都开了Python的接口,所以使用Python做大数据的mapreduce也非常简单,加上py对数据库支持都很好,或者类似sqlalchemy的orm也非常强大好用。 了解完Python工程师在企业里面的定位,大家或许还需要找一家培训中心进行学习。 1.权威资深师资阵容,Python业内极具责任心、懂教学、拥有超强技术、有大型项目经验实战派讲师授课,由业内知名专家及企业技术骨干组成; 2.自主研发QFTS教学系统,拥有自主知识产权的Python开发培训课程体

数学建模常用软件

数学建模常用软件有哪些哈 MatlabMathematicalingoSAS详细介绍:数学建模软件介绍一般来说学习数学建模,常用的软件有四种,分别是:matlab、lingo、Mathematica和SAS下面简单介绍一下这四种。 1.MA TLAB的概况MA TLAB是矩阵实验室(Matrix Laboratory)之意。除具备卓越的数值计算能力外,它还提供了专业水平的符号计算,文字处理,可视化建模仿真和实时控制等功能。MATLAB的基本数据单位是矩阵,它的指令表达式与数学,工程中常用的形式十分相似,故用MATLAB来解算问题要比用C,FORTRAN等语言完相同的事情简捷得多. 当前流行的MA TLAB 5.3/Simulink 3.0包括拥有数百个内部函数的主包和三十几种工具包(Toolbox).工具包又可以分为功能性工具包和学科工具包.功能工具包用来扩充MATLAB的符号计算,可视化建模仿真,文字处理及实时控制等功能.学科工具包是专业性比较强的工具包,控制工具包,信号处理工具包,通信工具包等都属于此类. 开放性使MATLAB广受用户欢迎.除内部函数外,所有MA TLAB主包文件和各种工具包都是可读可修改的文件,用户通过对源程序的修改或加入自己编写程序构造新的专用工具包. 2.Mathematica的概况Wolfram Research 是高科技计算机运算( Technical computing )的先趋,由复杂理论的发明者Stephen Wolfram 成立于1987年,在1988年推出高科技计算机运算软件Mathematica,是一个足以媲美诺贝尔奖的天才产品。Mathematica 是一套整合数字以及符号运算的数学工具软件,提供了全球超过百万的研究人员,工程师,物理学家,分析师以及其它技术专业人员容易使用的顶级科学运算环境。目前已在学术界、电机、机械、化学、土木、信息工程、财务金融、医学、物理、统计、教育出版、OEM 等领域广泛使用。Mathematica 的特色·具有高阶的演算方法和丰富的数学函数库和庞大的数学知识库,让Mathematica 5 在线性代数方面的数值运算,例如特征向量、反矩阵等,皆比Matlab R13做得更快更好,提供业界最精确的数值运算结果。·Mathematica不但可以做数值计算,还提供最优秀的可设计的符号运算。·丰富的数学函数库,可以快速的解答微积分、线性代数、微分方程、复变函数、数值分析、机率统计等等问题。·Mathematica可以绘制各专业领域专业函数图形,提供丰富的图形表示方法,结果呈现可视化。·Mathematica可编排专业的科学论文期刊,让运算与排版在同一环境下完成,提供高品质可编辑的排版公式与表格,屏幕与打印的自动最佳化排版,组织由初始概念到最后报告的计划,并且对txt、html、pdf 等格式的输出提供了最好的兼容性。·可与C、C++ 、Fortran、Perl、Visual Basic、以及Java 结合,提供强大高级语言接口功能,使得程序开发更方便。·Mathematica本身就是一个方便学习的程序语言。Mathematica提供互动且丰富的帮助功能,让使用者现学现卖。强大的功能,简单的操作,非常容易学习特点,可以最有效的缩短研发时间。 3.lingo的概况LINGO则用于求解非线性规划(NLP—NON—LINEAR PROGRAMMING)和二次规则(QP—QUARATIC PROGRAMING)其中LINGO 6.0学生版最多可版最多达300个变量和150个约束的规则问题,其标准版的求解能力亦再10^4量级以上。虽然LINDO和LINGO不能直接求解目标规划问题,但用序贯式算法可分解成一个个LINDO和LINGO能解决的规划问题。模型建立语言和求解引擎的整合LINGO是使建立和求解线性、非线性和整数最佳化模型更快更简单更有效率的综合工具。LINGO提供强大的语言和快速的求解引擎来阐述和求解最佳化模型。■简单的模型表示LINGO可以将线性、非线性和整数问题迅速得予以公式表示,并且容易阅读、了解和修改。■方便的数据输入和输出选择LINGO建立的模型可以直接从数据库或工作表获取资料。同样地,LINGO可以将求解结果直接输出到数据库或工作表。■强大的求解引擎LINGO内建的求解引擎有线性、非线性(convex and nonconvex)、二次、二次

perl简单爬虫教程

本教程是一个简单的perl爬虫例子,使用正则表达式来抓取网页的内容(主要是为了练习练习正则,真的爬虫都不用正则而是使用DOM). 本教程的测试网站为(https://www.360docs.net/doc/a81386245.html,/weather/101020100.shtml)目的是抓取网站上如下表中的天气信息。 最后的结果为 使用到的工具(firefox浏览器,firebug插件,perl) 教程开始

1:观察网页结构 1.1 我们使用firebug发现我们想要抓取的表格的HTML代码结构为 1.2 我们看到我们要的表格放在3个class=”yuBaoTable”的

标签中,所以我们用一个正则将我们要的3段
存到一个一个数组中。(这里我们用perl来做)$start = '
我们又发现每天的白天和黑夜是放在两个标签里的 1.4 所以我们又用一个正则将两个中的代码存到一个数组 my @find_day = (/(.*?)<\/tr>/gs);

1.5 现在我们得到的就是我们需要抓取的最小单位了(每个白天/晚上的天气情况),接着用一堆正则将我们要的信息捕获出来即可 foreach my $re1(@find_day){ if($re1 =~ />(\d{1,2}日星期.*?)<\/a>/s){ print "$1\n"; } if($re1 =~ /(白天|夜间)/s){ printf "%8s:",$1; } if($re1 =~ /(晴|多云|阴|小雨|中雨|小到中雨|阵雨)/s){ printf "%5s ",$1; } #30 if($re1 =~ /(高温|低温).*?\(.*?)<\/strong>/s){ printf "%8s:%5s",$1,$2 ; } if($re1 =~ /(西北风|北风|东北方|东风|东南风|南风|西南风|西风)/s){ printf "%8s:",$1; } if($re1 =~ />.*?(\d-\d级).*?<\/a>/s){ printf "%6s\n",$1; } } 抓取结束。。。 贴上完整代码(perl版)

shtml入门教程(超详细)

超级详细shtml教程 SSI有什么用? 之所以要扯到ssi,是因为shtml--server-parsed HTML 的首字母缩略词。包含有嵌入式服务器方包含命令的HTML 文本。在被传送给浏览器之前,服务器会对SHTML 文档进行完全地读取、分析以及修改。 shtml和asp 有一些相似,以shtml命名的文件里,使用了ssi的一些指令,就像asp中的指令,你可以在SHTML文件中写入SSI指令,当客户端访问这些shtml文件时,服务器端会把这些SHTML文件进行读取和解释,把SHTML文件中包含的SSI指令解释出来 比如:你可以在SHTML文件中用SSI指令引用其他的html文件(#include ),服务器传送给客户端的文件,是已经解释的SHTML不会有SSI指令。它实现了HTML所没有的功能,就是可以实现了动态的SHTML,可以说是HTML的一种进化吧。像新浪的新闻系统就是这样的,新闻内容是固定的但它上面的广告和菜单等就是用#include引用进来的。 目前,主要有以下几种用用途: 1、显示服务器端环境变量<#echo> 2、将文本内容直接插入到文档中<#include> 3、显示WEB文档相关信息<#flastmod #fsize> (如文件制作日期/大小等) 4、直接执行服务器上的各种程序<#exec>(如CGI或其他可执行程序) 5、设置SSI信息显示格式<#config>(如文件制作日期/大小显示方式) 高级SSI可设置变量使用if条件语句。 使用SSI SSI是为WEB服务器提供的一套命令,这些命令只要直接嵌入到HTML文档的注释内容之中即可。如:

-Python基础教程(自学记录)

第一章快速改造:基础知识 1.2交互式解释器 在IDLE编辑器,在提示符后输入help然后按回车;也可以按下F1获得有关IDLE的帮助信息 1.4数字和表达式 1/2返回0,整除除法;1.0/2返回0.5,用一个或者多个包含小数点的数字参与计算。另外改变除法的执行方式:from_future_import division //可以实现整除,1.0//2.0返回0.0 %取余数;**幂运算; >>> 1/2

>>> 1.0/2 0.5 >>> 1.0//2.0 0.0 >>> 10%3 1 >>> 9**(1/2) 1 >>> 9**(1.0/2) 3.0 >>> 2.75%0.5 0.25 >>> -9%4 3 >>> -3%2 1 >>> -3/2 -2 1.4.1长整数 普通整数不能大于2147483647也不能小于-2147483648,若更大的数,可以使用长整数。长整数结尾有个L,理论上小写也可以,不过为了便于识别,尽可能用大写。

1.4.2十六进制和八进制 0XAF返回175 ,十六进制; 010返回8,八进制 >>> 0xAF 175 >>> 010 8 1.5变量 包含字母、数字和下划线。首字母不能是数字开头。 1.8函数 Pow计算乘方:pow(2,3),2**3均返回8;pow等标准函数称为内建函数。 Abs(-10)求绝对值,返回10;round(1.0/2.0)返回1.0,把浮点数四舍五入为最接近的整数值。 >>> pow(2,3) 8 >>> 2**3 8 >>> abs(-10) 10 >>> round(1.0/2.0) 1.0

perl 期末考试题

PERL复习题 一、选择题 B 1. What is the simplest type of data that Perl can work with? A element B scalar C vector D component 2. Which operator can be used to take the bottom item from an array? A pop B push C pull D plant 3. Which operator is used to arrange items in character order? A ascend B sort C arrange D descend 4. Rather than using print, what is often used in Perl when formatting is important? A printf B format C align D show 5. Which modifier can be used when matching in Perl to ignore case? A s B v C i D c 6. Which operator can be used to break up a string into more than one part based upon a separator? A chop B split C divide D parse 7. What option do you use when starting Perl to tell it to run in warning mode? __________ (Fill in the blank.) 8. Which control structure can be used to execute only a condition is false? A until B unless C while D without 9. Which of the following commands should be used to open a filehandle named KAREN to an existing file named sw? A open KAREN “>sw”; B open KAREN, “>sw”;

Catalyst入门教程

Catalyst入门教程(第1版) 前言 本教程是在CPAN上Catalyst的文档基础上编写的. 阅读本教程前你需要具备的知识: 1. 使用过perl编写cgi程序 2. 使用过perl的DBI编写perl程序进行数据库操作 编写者: 小生菜菜 联系邮箱: laomoi@https://www.360docs.net/doc/a81386245.html, 第 1 页

Catalyst入门教程(第1版) 目录 第 1 章CATALYST的简介 (3) 第1节搭建C A TAL YST开发环境 (3) 第2节创建第一个C A TAL YST项目 (4) 第 2 章剖析应用程序类 (8) 第 3 章掌握CONTROLLER (10) 第1节C ONTROLLER简介 (10) 第2节ACTION详解 (14) 第3节如何编写ACTION (23) 第 4 章掌握VIEW (29) 第1节简介 (29) 第2节TT入门 (32) 第3节把TT作为V IEW使用 (40) 第 5 章掌握MODEL (43) 第1节简介 (43) 第2节DBI X::C LASS::S CHEMA入门 (44) 第3节.把DBIC::S CHEMA作为M ODEL使用 (58) 第 6 章调试CATALYST程序 (62) 第 2 页

Catalyst入门教程(第1版) 第 1 章Catalyst的简介 使用perl进行web开发,传统的做法是写*.cgi文件,然后把这些cgi文件配到web server里面,当web server收到客户端的request时,就调用对应的cgi进行处理. 用这种方法进行web开发, cgi文件之间相对比较独立,代码里面可能含有大量的重复代码,整个系统的结构也是比较松散的, 可扩展性也不强. Catalyst是一套用来web开发的框架,基于Catalyst开发的web系统,具有比较强的可扩展性. 第1节搭建Catalyst开发环境 1 一般方法: 在linux系统上安装Catalyst只需要使用CPAN安装即可(推荐) cpan -i Catalyst cpan -i Catalyst::Devel(用来运行Catalyst项目的机器不需要安装该模块,如果需要使用Catalyst进行开发则需要安装该模块) 在windows上安装可以使用ppm,但是过程比较繁琐,不建议. 2 安装脚本 Matt Trout写了一个安装脚本: https://www.360docs.net/doc/a81386245.html,/static/cat-install 只需要从该链接下载脚本,然后 perl cat-install即可按顺序安装相关模块,可用于windows跟linux,如果用于windows的话,必须保证你的机器上有c编译器和make工具. 3 模块打包方法(推荐) Chris Laco把Catalyst相关的模块打成了一个包:https://www.360docs.net/doc/a81386245.html,/downloads/CatInABox.tar.gz 把该包下载下来不需要安装即可马上使用.可用于windows跟linux系统. 第 3 页

【黑马程序员】爬虫视频教程

【黑马程序员】爬虫视频教程 黑马程序员免费视频库:https://www.360docs.net/doc/a81386245.html,?2020sxkyk 1.网站反爬虫方式 2.网站为什么要反爬虫 3.如何应付反爬虫 网站反爬虫方式 一、通过User-Agent来控制访问: 无论是浏览器还是爬虫程序,在向服务器发起网络请求的时候,都会发过去一个

头文件:headers,表明身份 对于爬虫程序来说,最需要注意的字段就是:User-Agent 很多网站都会建立user-agent白名单,只有属于正常范围的user-agent才能够正常访问。 解决方法: 可以自己设置一下user-agent,或者更好的是,可以从一系列的user-agent里随机挑出一个符合标准的使用 二、通过JS脚本来防止爬虫: 举个例子:如果想爬取某个网站,在请求之前,它会有一个验证页面来验证你是否机器。 它是怎么实现的呢: * 他会通过js代码生成一大段随机的数字,然后要求浏览器通过js的运算得出这一串数字的和,再返回给服务器. 解决方法:使用PhantomJS * PhantomJS是一个Python包,他可以在没有图形界面的情况下,完全模拟一个”浏览器“,js脚本验证什么的再也不是问题了。 三、通过IP限制来反爬虫: 如果一个固定的ip在短暂的时间内,快速大量的访问一个网站,那自然会引起注意,管理员可以通过一些手段把这个ip给封了,爬虫程序自然也就做不了什么了。 解决方法: 比较成熟的方式是:IP代理池 简单的说,就是通过ip代理,从不同的ip进行访问,这样就不会被封掉ip了。可是ip代理的获取本身就是一个很麻烦的事情,网上有免费和付费的,但是质量都层次不齐。如果是企业里需要的话,可以通过自己购买集群云服务来自建代理池。 def get_ip_poll(): ''' 模拟代理池 返回一个字典类型的键值对, '''

Ruby语言入门教程

Ruby语言入门教程 Version0.6 编著张开川 kaichuan_zhang@https://www.360docs.net/doc/a81386245.html,

目录 自序 (3) 第一章概述 (4) 1.1编程语言的发展简史 (4) 1.2编程其实很容易 (5) 1.3Ruby的由来 (6) 1.4Ruby的特性 (7) 第二章 (8) 2.1下载Ruby1.8.5 (8) 2.2安装Ruby1.8.5for Windows (8) 2.3开始第一个小程序 (10) 2.4ruby语言的集成开发环境 (12) 第三章语法快览 (14) 3.1注释与分行 (14) 3.2分隔符 (15) 3.3关键字 (16) 3.4运算符 (17) 3.5标识名和变量的作用域 (19) 3.6类库 (19) 3.7数据类型 (20) 3.8赋值和条件运算符 (21) 3.9条件判断语句 (22) 3.10循环语句 (24) 3.11常与线程 (29) 3.12一个综合小练习 (30) 第四章一切都是对象 (31) 4.1两种思维方式 (31) 4.2对象 (32) 4.3封装 (33) 4.4继承 (34) 4.5多态36小跋37

自序 其它编程语言的学习都主要来自于书本,而Ruby的学习却是完全经由网络。我想,回报网络的最好方式就是在网络上还没有Ruby中文书籍的时候,编著一本Ruby中文入门教材。感谢编程语言发展史上的前辈们;感谢网络论坛上程序员们或是理智,或是激烈的讨论;感谢一切看到这本书的人。 曾经经受了SCJP的挖掘、挖掘、再挖掘(基于1.4,还没有Java5,Java6的许多特性),初遇Ruby,觉得十分亲切,仿佛童年时得到一个新奇的玩具。把玩之后,才发现玩具的塑料外壳里,藏着一把瑞士军刀。自此,模式、框架常常变得多余,很多时候可以更直接。好比在量子时代,星际航行只是一次时空转换而已,航天飞机静静地躺在博物馆里,那是旧时代科学的极致代表。 从物理课本中,我们感受到爱因斯坦的伟大,但对牛顿则怀以更加崇敬的心情。身体终将消逝,而你,我,他——我们的意识却将在网络中延续。旧时代文明的延续依赖于纸质书籍,书籍传递了理性之光。也许直觉才是这个宇宙本体的最初相用,直觉是一种天赋,我无从把握,但是理性,如此真切实在,她照亮了我,照亮了你,直到未来。 思,亘古如斯又倏忽闪现,谁的惊愕能深究它。 ——海德格尔 张开川 2006年12月31日

如何成为一名优秀的爬虫工程师

https://www.360docs.net/doc/a81386245.html, 如何成为一名优秀的爬虫工程师 过完年后到现在,基本每周面试十几个同学的节奏,慢慢在面试过程中,我觉得在爬虫工程师这条路上,其实很多同学是不清不楚的。毕竟大数据行业在国内兴起也就这几年,而爬虫工程师也由此从幕后走向台前,不清楚整个大行业的话,其实只能看到很片面的价值。 回忆这几年带团队的过程,还有团队的发展,有些同学片面低估爬虫工程师的价值,也有些同学盲目高看自已。这篇文章就说说我的想法,希望能让大家更了解这一行的一些工作,希望对大家是有所帮助的。 什么是爬虫工程师 简单定义爬虫工程师就是通过相关的互联网技术或工具,获取网站或相关应用数据的工程师。由于互联网许多数据都是公开的,可以通过写程序或使用工具,摸拟请求,获取到目标网站返回的数据,然后通过相关技术或手段,将数据结构化保存下来。 比如我们可以通过爬虫获取大众点评的餐饮数据 比如我们可以通过爬虫获取百度地图的数据 比如我们可以通过爬虫获取豆瓣上的影评数据 爬虫工程师需要掌握什么技能 笔者曾经见过一副图,基本也把一个爬虫工程师会遇到的事情给说个遍,大家可以看一下

https://www.360docs.net/doc/a81386245.html,

https://www.360docs.net/doc/a81386245.html, 但说白,这些知识点,都是建立爬虫获取数据的基础之上。而爬虫获取数据就两种方式,一种就是自已写代码,一种就是用爬虫工具。 1.代码方向 通过写代码获取数据,基本任意一款主流的代码语言,其实都是有网络通讯包可以来做爬虫,无论是主流的python,还是java,还是c#都有,这里面只是由于python 用的人比较多,有一些库都封装好,效率也高,所以用的人比较多(很多大数据团队都在用python,所以就跟着用)。 通过代码的达到精通需要以下几个环节 1.熟悉任意一款语言,并达到可编写任意功能性代码的能力 2.熟悉HTTP协议,其实就是一个GET,一个POST,顶多带上一个cookie 2.工具方向 这个就很好理解,精通某一款主流的采集工具,比如说我们八爪鱼采集器 达到精通需要到什么程度? 1.如果你会用我们八爪鱼与XPATH,定位网页任意元素 2.如果你知道如何八爪鱼采集原理,懂得拆分规则,让整个采集效率翻10倍 3.其实没有天天使用我们八爪鱼超过三个月以上,写过一两百个规则的,都不应该算精通吧哈 以上两个工具层面熟悉外,还需要熟悉以下东西包括 1.防采集原理(验证码,多IP等) 2.html前端解析知识

python爬虫入门到精通必备的书籍

https://www.360docs.net/doc/a81386245.html, python爬虫入门到精通必备的书籍 python是一种常见的网络爬虫语言,学习python爬虫,需要理论与实践相结合,Python生态中的爬虫库多如牛毛,urllib、urllib2、requests、beautifulsoup、scrapy、pyspider都是爬虫相关的库,但是如果没有理论知识,纯粹地学习如何使用这些API如何调用是不会有提升的。所以,在学习这些库的同时,需要去系统的学习爬虫的相关原理。你需要懂的技术包括Python编程语言、HTTP协议、数据库、Linux等知识。这样才能做到真正从入门python爬虫到精通,下面推荐几本经典的书籍。 1、Python语言入门的书籍: 适合没有编程基础的,入门Python的书籍 1、《简明Python教程》 本书采用知识共享协议免费分发,意味着任何人都可以免费获取,这

https://www.360docs.net/doc/a81386245.html, 本书走过了11个年头,最新版以Python3为基础同时也会兼顾到Python2的一些东西,内容非常精简。 2、《父与子的编程之旅》 一本正儿八经Python编程入门书,以寓教于乐的形式阐述编程,显得更轻松愉快一些。 3、《笨办法学Python》 这并不是关于亲子关系的编程书,而是一本正儿八经Python编程入门书,只是以这种寓教于乐的形式阐述编程,显得更轻松愉快一些。 4、《深入浅出Python》 Head First 系列的书籍一直饱受赞誉,这本也不例外。Head First Python主要讲述了Python 3的基础语法知识以及如何使用Python

https://www.360docs.net/doc/a81386245.html, 快速地进行Web、手机上的开发。 5、《像计算机科学家一样思考python》 内容讲解清楚明白,非常适合python入门用,但对于学习过其他编程语言的读者来说可能会觉得进度比较慢,但作者的思路和想法确实给人很多启发,对于菜鸟来说收益匪浅,书中很多例子还是有一定难度的,完全吃透也不容易。 6、《Python编程:入门到实践》 厚厚的一本书,本书的内容基础而且全面,适合纯小白看。Python学习进阶书籍 1、《Python学习手册》 本书解释详细,例子丰富;关于Python语言本身的讲解全面详尽而

CentOS+Zimbra详细配置教程

我的博客:https://www.360docs.net/doc/a81386245.html, 实验环境: 服务器系统:centos5 64位 IP:192.168.0.3 zimbra安装包:zxvf zcs-6.0.10_GA_2692.RHEL5_64.20101215170845.tgz 网络适配器的参数: [root@zcs ~]# ifconfig eth0 | grep 'inet addr'|awk '{print $2}'|cut -c 6- 192.168.0.3 /etc/sysconfig/network文件的主机名配置: HOSTNAME=https://www.360docs.net/doc/a81386245.html, /etc/hosts文件的配置: [root@zcs ~]# cat /etc/hosts 127.0.0.1 localhost.localdomain localhost ::1 localhost6.localdomain6 localhost6 192.168.0.3 https://www.360docs.net/doc/a81386245.html, zimbra /etc/resolv.conf文件的配置: [root@zcs ~]# cat /etc/resolv.conf nameserver 192.168.0.3 主机名称: [root@zcs ~]# hostname https://www.360docs.net/doc/a81386245.html, 配置dns服务: 编辑DNS解析配置文件: [root@zcs etc]# vi named.conf options { directory "/var/named"; dump-file "/var/named/data/cache_dump.db"; statistics-file "/var/named/data/named_stats.txt"; memstatistics-file "/var/named/data/named_mem_stats.txt"; }; logging { channel default_debug { file "data/named.run"; severity dynamic; }; }; zone "https://www.360docs.net/doc/a81386245.html," IN { type master; file "https://www.360docs.net/doc/a81386245.html,.zone"; allow-update {none;}; }; zone "0.168.192.in-addr.arpa" IN { type master; file "0.168.192.in-addr.arpa.zone";

Python基础入门教程

Python基础入门教程 你可能已经听说过很多种流行编程语言,比如非常难学的C语言,非常流行的Java语言,适合初学者的Basic语言,适合网页编程的JavaScript语言,那么你知道Python是一种怎样的计算机程序设计语言吗?下面应广大读者需求,给大家呈上一篇Python基础入门教程的文章。 Python 是由Guido van Rossum 在八十年代末和九十年代初,在荷兰国家数学和计算机科学研究所设计出来的。 Python 本身也是由诸多其他语言发展而来的,这包括ABC、Modula-3、C、C++、Algol-68、SmallTalk、Unix shell 和其他的脚本语言等等。 像Perl 语言一样,Python 源代码同样遵循GPL(GNU General Public License)协议。 现在Python 是由一个核心开发团队在维护,Guido van Rossum 仍然占据着至关重要的作用,指导其进展。 Python 特点

? 1.易于学习:Python有相对较少的关键字,结构简单,和一个明确定义的语法,学习起来更加简单。 ? 2.易于阅读:Python代码定义的更清晰。 ? 3.易于维护:Python的成功在于它的源代码是相当容易维护的。 ? 4.一个广泛的标准库:Python的最大的优势之一是丰富的库,跨平台的,在UNIX,Windows和Macintosh兼容很好。 ? 5.互动模式:互动模式的支持,您可以从终端输入执行代码并获得结果的语言,互动的测试和调试代码片断。 ? 6.可移植:基于其开放源代码的特性,Python已经被移植(也就是使其工作)到许多平台。 ?7.可扩展:如果你需要一段运行很快的关键代码,或者是想要编写一些不愿开放的算法,你可以使用C或C++完成那部分程序,然后从你的Python程序中调用。 ?8.数据库:Python提供所有主要的商业数据库的接口。 ?9.GUI编程:Python支持GUI可以创建和移植到许多系统调用。 ?10.可嵌入: 你可以将Python嵌入到C/C++程序,让你的程序的用户获得"脚本化"的能力。

Perl命令行参数

Perl命令行参数 执行控制 -e 指定字符串以作为脚本(多个字符串迭加)执行 -M 导入模块 -I 指定目录以搜索标准位置前的模块 整洁性 -w 打开警告 -Mstrict 打开严格编译指示(pragma) 数据 -0 (这是个零)指定输入记录分隔符 -a 将数据分割成名为@F 的数组 -F 指定分割时-a 使用的模式(请参阅perldoc -f split) -i 在适当的位置编辑文件(请参阅perldoc perlrun 以获取大量详细信息) -c 进行perl的语法检查,但不执行perl命令 -F 把缺省的分离号改为你想要的。例如把分离号定为非字符 -l 使用-l有两个效果,第一自动chomp输入分隔号,第二把$/值付给$\(这样print的时候就会自动在末尾加\n) -n 使用<>将所有@ARGV参数当作文件来逐行运行,会将读入的内容隐式的逐一按行来遍历文件,每一行将缺省保存在$_ -p 和-n一样,但是还会打印$_的内容 请注意-p 开关和-n 开关的使用 当您想显式打印数据时,使用-n开关。-p开关隐式地将print $_语句插入到-n开关所产生的循环中。因此,-p开关更适用于对文件进行的完全处理,而-n开关更适用于选择性文件处理,这样的处理只需打印特定数据。 以下是一些常用的简单实例 #perl -pi –e?s/aaa/bbb/? filename 修改当前file文件中的文件,不生成中间文件,速度很快。记住-i开关,因为它让你原地编辑文件。 #perl -ne …print if /^aaaaa/? filename 象grep一样过滤文件中需要的内容。这个地方使用了-n,所以一次是做一行的操作,直到整个文件读完。另外在管道时,-n也会一样来遍历管道送过来的内容。 # perl -n -e 'print "$. – $_"' filename 这个例子中的,没用-ne,只是命令写成了-n –e,其实一样,这个例子中是给当前文件中的内容都加一个行号打印出来。 注:$.表示当前行号