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 =
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
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:
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”的