perl命令行参数内建数组@ARGV浅析
Perl的命令行参数和ARGV
Perl的命令⾏参数和ARGV程序名:$0$0表⽰当前正在运⾏的Perl脚本名。
有3种情况:如果执⾏⽅式为perl x.pl,则$0的值为x.pl⽽⾮perl命令本⾝如果执⾏⽅式为./x.pl,则$0的值为./x.pl如果执⾏的是perl -e或perl -E⼀⾏式perl程序,则$0的值为-e或-E命令⾏参数ARGVperl将perl命令⾏的参数列表放进数组ARGV(@ARGV)中。
既然是数组,就可以访问($ARGV[n])、遍历,甚⾄修改数组元素ARGV数组分三种情况收集:perl x.pl a b c⽅式运⾏时,脚本名x.pl之后的a b c才会被收集到ARGV数组./x.pl a b c⽅式运⾏时,a b c才会被收集到ARGV数组perl -e 'xxxxx' a b c⽅式运⾏时,a b c才会被收集到ARGV数组ARGV数组索引从0开始计算,索引0位从脚本名(perl程序名)之后的参数开始计算默认,这些命令⾏参数是perl程序的数据输⼊源,也就是perl会依次将它们当作⽂件进⾏读取参数是有序的,读取的时候也是有序的需要区分ARGV变量和ARGV数组:$ARGV表⽰命令⾏参数代表的⽂件列表中,当前被处理的⽂件名@ARGV表⽰命令⾏参数数组$ARGV[n]:表⽰命令⾏参数数组的元素ARGV:表⽰<>当前正在处理的⽂件句柄例如,test.plx的内容如下:/usr/bin/perlprint '$ARGV[0] ---> ',$ARGV[0],"\n",'$ARGV[1] ---> ',$ARGV[1],"\n",'$ARGV[2] ---> ',$ARGV[2],"\n",'$ARGV[3] ---> ',$ARGV[3],"\n",'$ARGV[4] ---> ',$ARGV[4],"\n";执⾏这个程序:shell> ./test.plx -w a b c d$ARGV[0] ---> -w$ARGV[1] ---> a$ARGV[2] ---> b$ARGV[3] ---> c$ARGV[4] ---> d因为是数组,所以可以修改数组,⽐如强制指定元素:/usr/bin/perl@ARGV=qw(first second third);print '$ARGV[0] ---> ',$ARGV[0],"\n",'$ARGV[1] ---> ',$ARGV[1],"\n",'$ARGV[2] ---> ',$ARGV[2],"\n";shell> ./test.plx a b c d$ARGV[0] ---> first$ARGV[1] ---> second$ARGV[2] ---> third例如,读取2个⽂件(a.log,b.log)的内容:/usr/bin/perlwhile(<>){print $_;}shell> ./test.plx a.log b.log如果想读取标准输⼊,只需使⽤"-"作为⽂件参数即可。
perl 数组用法 -回复
perl 数组用法-回复Perl是一种强大的编程语言,它提供了丰富的数组处理功能。
数组是一组有序的元素集合,可以存储任意类型的数据。
在Perl中,我们可以使用中括号来表示一个数组,并通过索引来访问数组中的元素。
本文将一步一步回答关于Perl数组的使用问题,帮助读者更好地理解和应用数组。
第一步,我们首先需要创建一个数组。
在Perl中,可以通过在中括号内指定元素来创建一个数组。
例如,我们可以创建一个包含整数的数组:my numbers = (1, 2, 3, 4, 5);在上述代码中,我们创建了一个名为`numbers`的数组,并将整数1,2,3,4和5赋值给数组元素。
请注意,``符号用于声明一个数组变量。
第二步,我们可以使用索引来访问数组中的元素。
在Perl中,数组的索引从0开始。
例如,我们可以使用以下代码访问数组`numbers`中的第一个元素:print numbers[0];上述代码将打印数组`numbers`中的第一个元素,即数字1。
我们还可以使用索引来对数组元素进行赋值操作。
例如,以下代码将修改数组`numbers`中的第一个元素:numbers[0] = 10;上述代码将数组`numbers`中的第一个元素更改为数字10。
第三步,我们可以使用内置函数来操作数组。
Perl提供了许多有用的函数,用于处理数组。
其中之一是`push`函数,它可以向数组末尾添加一个或多个元素。
例如,我们可以使用以下代码向数组`numbers`末尾添加一个数字6:push numbers, 6;上述代码将数字6添加到数组`numbers`的末尾。
我们还可以使用`pop`函数从数组末尾删除一个元素。
例如,以下代码将删除数组`numbers`的最后一个元素:pop numbers;上述代码将从数组`numbers`的末尾删除最后一个元素。
第四步,我们可以使用循环结构来遍历数组中的元素。
Perl提供了多种类型的循环,如`for`循环和`foreach`循环。
perl 语法
perl 语法Perl是一种高级编程语言,广泛用于Web开发、系统管理、数据处理和科学计算等领域。
Perl的语法十分灵活,具有强大的正则表达式和字符串处理功能,同时也支持面向对象编程和函数式编程。
本文将介绍Perl语法的一些基本概念和语法规则,包括数据类型、变量、运算符、流程控制语句、函数、正则表达式等方面。
1. 数据类型Perl支持多种数据类型,包括标量(Scalar)、数组(Array)和哈希(Hash)等。
标量是单值变量,包括数字、字符串、布尔值等类型;数组是有序的列表,每个元素可以是标量或者其他数据类型;哈希是以键值对形式存储的无序列表,每个键对应一个值。
在Perl中,变量名必须以字母或下划线开头,后面可以跟字母、数字、下划线等字符。
变量名区分大小写,因此$foo和$FOO是不同的变量。
2. 变量Perl的变量类型是动态的,也就是说可以在程序运行过程中动态改变数据类型。
变量可以通过赋值操作来定义和初始化,例如:$foo = 42; # 定义一个标量变量,并初始化为整数42 @bar = (1, 2, 3); # 定义一个数组变量,并初始化为包含三个元素的列表 %hash = ( # 定义一个哈希变量,并初始化为三个键值对 'foo' => 1, 'bar' => 2, 'baz' => 3 );Perl中的变量可以使用符号$、@和%来表示,分别对应标量、数组和哈希类型。
可以使用类似于C语言的赋值语句来给变量赋值,例如:$foo = 10; # 赋值标量变量 $bar[0] = 'a'; # 赋值数组元素 $hash{'foo'} = 1; # 赋值哈希元素3. 运算符Perl支持多种运算符,包括算术运算符、比较运算符、逻辑运算符、位运算符等。
其中,“.”运算符可以用来进行字符串拼接,例如:$foo = "hello"; # 定义一个字符串变量 $bar = "world"; $baz = $foo . $bar; # 字符串拼接运算符,将$foo和$bar连接起来Perl中的运算符优先级与C语言类似,可以使用括号来改变优先级,例如:$x = 3 + 4 * 5; # 先计算4*5,再加3,结果为23 $y = (3 + 4) * 5; # 先计算3+4,再乘以5,结果为354. 流程控制语句Perl支持多种流程控制语句,包括if语句、while语句、for语句、foreach语句等。
Perl中数组的使用
数组是perl里面一种非常有用的东西。
我们可以通过下面的方式定义数组:@a=("hello","great","cipher");@b=(1,2,3,4,5,6,7);@b的定义方式还可以写成下面的形式:@b=(1..7); #这种方式对于需要1到10000的初始值得数组真实太重要了。
@b=("a".."z");也是可以的,但是我想不出来对中国人有什么用。
定义一个空数组可以用下面的方式:@c=();访问数组通过下面的方式(下标和c语言一模一样,从0开始,basic的用户要注意了):$b[0]=10000;注意这里引导符变成了$不是@。
通过这个变化表示这时正在访问一个单独的数据。
而不是一组数据。
还可以使用多个下标,但是这时就要使用@引导符了。
例如:@b[5,7,9]=(45,56,67);这种情况下,print $b[8];将会在使用了perl -w得到一个使用未定义变量的错误,其他情况下什么都不会发生。
数组之间相互拷贝,可以用下面的方式:@d=@c;这样要比c语言简单多了。
同c语言不同,perl的数组是可以动态改变大小的。
因此我们可以追加,删除数组内的元素。
追加一个元素可以使用这种方式:@c=(@c,"hello");perl里面有一个专门的函数用来惊醒追加操作叫做push,push的使用方法如下:push(@c,"hello");push(@c,("hello","halloha"));push(@c,@a);这里可以看到,可以给数组追加一个元素,一组元素甚至另外一个数组。
另外,在perl的数组中可以放不同类型的标量。
这一点在c程序员的眼中可能有点怪异,但是如果记住perl里面的一切都是引用就可以了。
或者理解成这是一个void类型的指针的数组。
main函数中的参数argc和argv
main函数中的参数argc和argv
和京东评论
main函数中的参数argc和argv成为程序代码中不可缺少的元素,广泛用于编程语言,特别是c/c++中。
它们是函数的两个参数,分别指argc和argv,即参数个数和参数值。
argc是一个参数,即参数的个数,也就是说告诉编译器主函数所需要的参数个数,其值可以是任意值,但通常为0或者一个以上的正整数。
参数argc的值会影响另一个参数argv的值。
argv是一个参数,即参数值,它也是一个数组,用来存储用户在执行程序时传递给程序的参数。
argv是一个包含字符串值的数组,数组的每一个元素都是一个指向字符串值的指针,其中存储着子程序所需要的信息。
例如,用户可以在执行程序时传递文件名及路径,这些信息就可以存储在argv中,对程序的运行起到促进作用。
总的来说,main函数中的参数argc和argv是编写代码时不可或缺的参数,它们分别用来指定函数的参数个数和参数值,可以为程序提供必要的信息,从而促进程序的运行效率。
Perl命令行参数
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,其实一样,这个例子中是给当前文件中的内容都加一个行号打印出来。
perl语言基本命令
perl语言基本命令Perl语言是一种功能强大的脚本语言,可以用于处理文本、执行系统命令以及开发Web应用等。
本文将介绍一些Perl语言的基本命令和用法。
一、输出命令1. print:用于输出字符串或变量的值。
例如:```print "Hello, Perl!\n";```2. say:与print类似,但会自动换行。
例如:```say "Hello, Perl!";```3. printf:按照指定格式输出字符串或变量的值。
例如:```my $name = "Alice";my $age = 20;printf "Name: %s, Age: %d\n", $name, $age;```二、变量命令1. my:用于声明一个局部变量。
例如:```my $name = "Bob";```2. our:用于声明一个全局变量。
例如:```our $count = 0;```3. scalar:将数组或哈希转换为标量。
例如:```my @numbers = (1, 2, 3);my $count = scalar @numbers;```4. chomp:去除字符串末尾的换行符。
例如:```my $str = "Hello, Perl!\n";chomp $str;```三、输入命令1. <STDIN>:用于从标准输入读取用户输入的数据。
例如:```print "Please enter your name: ";my $name = <STDIN>;chomp $name;print "Hello, $name!\n";```2. getc:从标准输入读取一个字符。
例如:```print "Please enter a character: ";my $char = getc;print "You entered: $char\n";```四、控制流命令1. if-else:用于条件判断。
perl基础语法
Perl 是一种功能强大的编程语言,具有灵活的语法和广泛的应用领域。
以下是Perl 的基础语法:变量:Perl 使用符号来标识变量,例如name、$age。
变量可以是数字、字符串等数据类型。
数组:Perl 中的数组使用@ 符号来标识,例如@names。
数组可以包含多个元素,通过索引访问特定元素,例如$names[0]。
哈希表:Perl 中的哈希表使用% 符号来标识,例如%person。
哈希表是一种键值对的数据结构,可以通过键来访问对应的值,例如$person{'name'}。
控制结构:Perl 支持常见的控制结构,如if-else、while、for 循环等。
条件语句使用if 关键字,循环语句可以使用while 或for 关键字。
函数:Perl 中的函数使用sub 关键字定义,例如sub sayHello { print "Hello, World!\n"; }。
调用函数时,可以直接使用函数名加参数列表,例如sayHello()。
正则表达式:Perl 是正则表达式的强大工具,可以使用正则表达式进行模式匹配和文本处理。
正则表达式的模式使用// 包围,例如/hello/。
文件操作:Perl 提供了丰富的文件操作功能,可以打开、读取、写入文件等。
文件操作可以使用内置的文件句柄或自定义文件句柄。
模块和包:Perl 支持模块化编程,可以将代码拆分成不同的模块和包,提高代码的可重用性和可维护性。
模块和包可以使用use 或require 关键字引入。
这些是Perl 的基础语法概述,当然Perl 还有更多高级特性和用法等待你去探索和学习。
Perl直接入门详尽指南
Perl直接入门详尽指南最近接到一个任务是这样的,一台Solaris服务器上需要运行一个脚本,每天统计MySQL数据库中的数据并生成报表。
本来这是一个可以就事论事的小项目,但是为了以后的灵活和可扩展性,我设计了一个使用XML做统计模版配置的方案。
由于在Bash下不太好实现XML 的访问,因此我考虑用Perl来实现这个脚本。
Perl是一个强大的脚本语言,本来是设计应用在文本处理方面的,但是后来发展的越来越强大,已经可以处理网络、图形、系统、文件等等各个方面的内容。
Perl本身内置了丰富的操作符和函数,外部也有多年积累下来的大量模块。
但是不知道什么原因在国内好像很少有人用。
关于Perl的历史我就不多说了,有兴趣可以上网查一下。
有一点要说的是,目前Perl最新的版本是5.8.6,而Perl6虽然已经设计很久了但是由于自举问题目前还没有一个可用的版本。
为了解决这个问题,台湾的唐宗汉发起的Pugs项目正在快速的实施中,可能很快就能有结果了,有兴趣的朋友可以多多关注一下,也许还可以为开源世界做点贡献。
虽然很早以前就了解过Perl,但是从来就没有实际的用它做过项目,因此这次的实现是一个边学边做的过程。
作为一个程序员,学习一种新的语言总会有一点惯性思维,加之Perl在语法上与C语言比较类似。
因此我想在这片文章中主要以C为背景做一个比较。
这种比较不是比较语言上的优劣,而是说明同样的功能如何在Perl中实现以及之间的区别。
限于篇幅,具体的技术实现的细节我就不在这里多说了,你可以在末尾的资源一节中找到很多相关的文章。
如果你没有接触过Perl,我想你可能更希望看到学习Perl的过程中可能会遇到的一些问题以及解决方法。
工欲善其事,必先利其器要写代码,首先至少得有一个编辑器。
Perl是跨平台的一种解释型语言,可以在Unix/Linux/Windows/Mac等平台上运行。
具体对应平台上的编辑器,最简单的方案是Unix下用vi,Windows下用UltraEdit。
main参数argvc-argv详解
int main(int argc,char* argv[])详解用于在命令行运行程序时带有参数的情况。
假如用notepad打开一个指定的文本文件,就可以在直接在notepad后面跟上文件的路径和名字,如notepad example.txt(文件在当前路径)。
对于这种要求,需要在设计C语言程序时安排输入参数的功能,也就是main函数需要写成int main( int argc , char *argv[] ) 。
char *argv[]是一个字符数组,其大小是int,数组里每个元素代表一个参数;argc记录了用户在运行程序的命令行中输入的参数的个数。
argv[]指向的数组中至少有一个字符指针,即arg[0].通常指向程序中的可执行文件的文件名。
下面是一个例子程序:程序项目名为argtest#include<stdio.h>int main( int argc , char *argv[] ){int i;printf( "You have inputed total %d argments\n", argc);//参数个数argc for( i=0 ; i<argc ; i++){printf( "arg%d : %s\n" , i , argv[i] );//具体参数名agrv[] }return 0;}经过C编译器编译后得到可执行文件argtest.exe,具有在命令行带参数运行功能,比如运行时输入9个参数:this,is,a,test,programe,of,main()'s,argmentsD:\>argtest this is a test programe of main()'s argments运行后得到的结果如下:You have inputed total 9 argmentsarg0 : D:\TC\NONAME.EXEarg1 : thisarg2 : isarg3 : aarg4 : testarg5 : programearg6 : ofarg7 : main()'sarg8 : argments。
perl 数组 函数参数
perl 数组函数参数Perl 数组函数参数在Perl编程语言中,数组是一种重要的数据结构,用于存储和操作多个相关的数据项。
Perl中的数组可以作为函数的参数传递,这使得代码重用和模块化的实现变得更加简单和灵活。
本文将介绍Perl中数组函数参数的使用方法和一些注意事项。
1. 声明和初始化数组在使用数组作为函数参数之前,首先需要声明和初始化数组。
在Perl中,可以通过在数组名称前加上“@”符号来声明一个数组,并使用一对圆括号来初始化其中的元素。
例如:```my @numbers = (1, 2, 3, 4, 5);```上述代码声明了一个名为@numbers的数组,并初始化了五个整数元素。
根据实际需要,数组的元素可以是不同的数据类型,例如字符串、浮点数等。
2. 将数组作为函数参数传递在Perl中,通过将数组作为函数参数传递,可以在不同的函数之间传递和共享数组数据。
为了将数组作为参数传递给函数,在函数调用时,将数组名称作为参数传递给函数即可。
例如:```sub print_array {my @arr = @_;foreach my $element (@arr) {print "$element ";}print "\n";}my @numbers = (1, 2, 3, 4, 5);print_array(@numbers);```上述代码中,print_array函数接受一个数组参数,并将数组的所有元素打印到屏幕上。
在函数内部,通过使用“@_”特殊变量,可以获取传递给函数的参数列表。
3. 在函数中修改数组通过将数组作为函数参数传递,可以在函数中对数组进行修改,并将修改后的数组返回给调用者。
为了在函数中修改数组,可以直接对数组进行操作,无需返回数组。
例如:```sub add_element {my ($arr, $element) = @_;push @$arr, $element;}my @numbers = (1, 2, 3, 4, 5);add_element(\@numbers, 6);print_array(@numbers);```上述代码中,add_element函数接受一个数组参数和一个待添加的元素参数。
c语言main 函数参数列表中argc和argv的原理
c语言main 函数参数列表中argc和argv的原理
C语言中的main函数参数列表中包含了两个参数,分别是argc
和argv。
这两个参数在程序运行时被系统自动传入,用于获取命令
行参数。
其中,argc表示命令行参数的个数,包括程序本身。
例如,执
行程序时输入命令“test.exe arg1 arg2”,则argc的值为3。
而argv则是一个指针数组,用于存储命令行参数的内容。
数组
中的每个元素都是一个指向字符串的指针,即每个命令行参数都是以字符串的形式存储的。
需要注意的是,argv[0]存储的是程序的名称。
因此,当使用命
令行参数时,需要从argv[1]开始遍历获取实际的参数值。
这两个参数的原理是通过系统自动传入来实现的。
在程序启动时,操作系统会自动将命令行参数转换成一个字符指针数组,并把数组的大小作为参数传给main函数,即argc的值。
同时,系统会将字符指针数组的头指针作为参数传给main函数,即argv的值。
因此,我们可以在程序中直接使用这两个参数来获取命令行参数的值,而无需自己手动解析命令行参数。
- 1 -。
perl 基本语法介绍
perl 基本语法介绍本文介绍从变量类型、操作运算符、控制叙述、子程序、I/O和档案处理、Regular Expressions、Spectial Variables、Help、函数、总结几个部分介绍perl,只是叙述了一些Perl的基本语法一.数据类型(Data type):Perl 的数据类型大致分为四种:Scalar(变量)、Scalar Array(数组)、Hash Array(散列)、References(指针),看起来虽少但用起来却绰绰有余。
尤其在写Perl程序时可以不必事先宣告变量,这一点对刚学程序语言的人甚为方便,不过为了以后程序除错和维护方便,我建议你还是养成事先声明变量的习惯比较好。
1 Scalar(纯量变量):纯量变量是Perl里最基本的一种数据型态,它可以代表一个字符、字符串、整数、甚至浮点数,而Perl把它们都看成是一样的东东! 你甚至可以混着用,不可思议吧。
例如:# 井字号开头的后面都是批注。
# 纯量变数以$开头。
# my 是一种宣告变量的方式,它可以使变量区域化。
# 宣告变量时若不加my 或local 则Perl会把它当作全域变量使用。
# 习惯上,我们会将字符串用双引号括起来,而数值就不用加引号。
my $x="abc";my $x=123;my $x=4.56;1-1 常用的操作运算符1)、算术运算符+(加)、-(减)、*(乘)、/(除)、**(幂)、%(余)、-(负)(1)求幂(**)结果不能超出数的范围。
当指数为小数时,底数不能为负数,例如:25**1.5=125,(-25)**1.5=?(不成立)(2)取余(%)操作数为整数,否则要截取。
第二个数不能为0(因为除数不能为0)(3)负(-)-$a=$a*(-1)此外,注意当一个字符串参加运算,需要转化为整数时,如果不能转化为整数则值为0。
例如:'2'+1=3,'a'+1=12)、数字比较运算符<(小于)、=(等于)、>(大于)、==(等于)、<=(小于等于)、>=(大于等于)、!=(不等于)、<=>(比较)(1)==:比较运算,比较的结果为真或非零,假或零(2)<=>:比较运算例如:$a<=>$b,当$a>$b时,值为1;当$a<$b时,值为-1;当$a==$b 时,值为0(3)自动把操作数转化为整数,不能转化为整数则为0(4)浮点数不精确,不要把值相近的数比较,否则得到的结果是出乎意料的3)、字符串比较运算符lt(小于)、gt(大于)、eq(等于)、le(小于等于)、ge(大于等于)、ne(不等于)、cmp(比较)(1)字符串的比较原则:按照字母表的顺序比较,数字<大写字母<小写字母(a小—z大)(2)字符串比较的次序:字符串从左到右比较。
perl选项、特殊变量、一些函数参考手册
perl选项、特殊变量、⼀些函数参考⼿册perl⼀⾏式程序系列⽂章:本⽂⽤来收集Perl⼀⾏式中涉及到的⼀些选项、特殊变量的说明,可以⽤来做速查⼿册。
本⽂会逐渐更新。
第⼀次学Perl⼀⾏式时,请直接忽略本⽂内容,并直接从后⾯的⽰例部分开始看。
本⽂会在每⼀个⽰例中解释出现的选项、变量、函数和语法。
⼀⾏式选项perl⼀⾏式语法:perl [-0aFlimMnps] -e 'EXPRESSION' ARGUMENTSperl [-0aFlimMnps] -E 'EXPRESSION' ARGUMENTS其中"-e"或"-E"选项⽤于指定待运⾏的表达式,它们之间的不同点在于"-E"会⾃动启⽤⾼版本功能特性,例如可以直接使⽤say()函数⽽⽆需先use 5.010;。
可以指定多个-e/-E,但使⽤多个的时候,注意每个表达式后⾯的';'结尾符号,否则语法报错。
-n和-p这两个选项都表⽰按照隐含的逻辑直接处理表达式后⾯的参数代表的⽂件。
如果perl -e命令⾏中没有这两个选项,则只能⾃⼰在-e表达式中编写读取⽂件、处理数据、输出/删除的代码逻辑。
-n选项使得perl单⾏命令以类似于如下代码的⽅式运⾏:LINE:while(<>){...-e expression CODE HERE...}由于while中使⽤的是<>,所以它会从@ARGV中读取参数⽂件进⾏处理。
perl -n就像sed -n⼀样,表⽰禁⽌默认的输出。
如果想要强制输出,只能在-e表达式中⾃⾏指定输出操作,例如print/say/printf。
-p选项使得perl单⾏命令以类似于如下代码的⽅式运⾏:LINE:while(<>){...-e expression CODE HERE...}continue{print or die "-p destination: $!\n";}perl -p⽤于强制输出$_,它会覆盖-n选项。
perl命令行参数内建数组@ARGV浅析
当perl脚本运行时,从命令行上传递给它的参数存储在内建数组@ARGV中,@ARGV 是PERL默认用来接收参数的数组,可以有多个参数,$ARGV[0]是表示接收到的第一个参数,$ARGV[1]表示第二个。
使用方法为:复制代码代码如下:perl my.pl $ARGV[0] $ARGV[1]看一个具体例子:比如文件1的内容:复制代码代码如下:13202381320239132023913202381320238132023813202351320237文件2的内容:复制代码代码如下:102 5709072117805887 4001 1301854102 5709072117807510 4001 1320292102 5709072117838653 4001 1301857102 5709072117814280 4001 1305832102 5709072117839397 4001 1310673102 5709072117839335 4001 1311270我想先把文件1的内容读取出来,然后读取文件二的内容,在读取文件2的内容的时候,文件2的最后一列需要包含在上文件1内。
复制代码代码如下:[root@localhost ~]$ perl ex.pl 1.txt 2.txt[root@localhost ~]$ cat ex.pl#!/usr/bin/perluse strict;open(ONE,"$ARGV[0]") or die $!;open(TWO,"$ARGV[1]") or die $!;my %hash;while (<TWO>) {chomp;my @line=split;my $column4=$line[3];$hash{$column4}=$_;}while (<ONE>) {chomp;print $hash{$_} if defined $hash{$_};}print"\n";更多信息请查看IT技术专栏。
Perl一句话命令行编程中常用参数总结
Perl⼀句话命令⾏编程中常⽤参数总结⼯作中的线上环境有很多的perl命令⾏的类似⼀句话的命令,今天总结下perl的命令⾏编程的⼀些东西。
-e 后⾯紧跟着引号⾥⾯的字符串是要执⾏的命令:复制代码代码如下:king@king:~$ perl -e ‘print “hello world \n”‘hello world如果是多个命令就可以使⽤多个-e,这⾥是不是想到了sed呢?但是要注意的是中间的哪个“;”.复制代码代码如下:king@king:~$ perl -e ‘print “hello world \n” ;' -e ‘print “my first perl command line script \n”‘hello worldmy first perl command line script-M 导⼊要使⽤的模块:复制代码代码如下:king@king:~$ perl -MLWP::Simple -e'print head “”,”\n”‘text/html; charset=utf-81337525116978307200Apache/2.2.3 (CentOS)另外-M可以判断某个模块是不是已经安装了-m 的功能和-M类似,区别在于-M 模块名等同于use 模块名,这样会把⼀些默认的函数或者其它东西引进过来,-m 模块名则会关闭这些默认值,这样可以引⼊⼀些你只使⽤的函数;例如上⾯的例⼦:换成-m的话就不会有任何输出;-m 和 -M 通过 = 来引⼊某个模块的特别函数.复制代码代码如下:perl -MCGI='header,start_html' -e ‘print header, start_html'-w 等同于use warnings-n -p 都会使⽤ <> 将所有 @ARGV 参数当作⽂件来逐⾏运⾏(有循环的意思哦,经常和其它参数⼀起处理⽂件),会将读⼊的内容隐式的逐⼀按⾏来遍历⽂件.每⼀⾏将缺省保存在 $_;但-p 会将内容“重复”打印出来,⽽-n更倾向与打印满⾜某种条件的⾏(这这⾥还有⼀些有⽤的变量⽐如$. 表⽰当前⾏的⾏数):复制代码代码如下:king@king:~$ cat file.txtA 1B 2C 3king@king:~$ perl -p -e ‘print ‘ file.txtA 1A 1B 2B 2C 3C 3king@king:~$ perl -n -e ‘print ‘ file.txtA 1B 2C 3看到这⾥是不是想到了sed的-n 的特性:复制代码代码如下:king@king:~$ sed -ne ‘p' file.txtA 1B 2C 3king@king:~$ sed -e ‘p' file.txtA 1A 1B 2B 2C 3C 3-i 将修改直接的写⼊⽂件,这个和sed也是⼀样的哦;复制代码代码如下:king@king:~$ cat file.txtA 1B 2C 3king@king:~$ perl -pi -e ‘s/A/a/' file.txtking@king:~$ cat file.txta 1B 2C 3-a 打开⾃动分离 (split) 模式. 空格是缺省的分离号. 输⼊根据分离号被分离然后放⼊缺省数组 @F.复制代码代码如下:king@king:~$ perl -na -e ‘print $F[1],”\n”‘ file.txt123和awk是不是很像?还有更像的,那就是-F,和awk⼀样更改字段之间的分割符,默认是空格和tab;复制代码代码如下:king@king:~$ perl -F':' -alne ‘print $F[0],” “,$F[-1] if /bash$/' /etc/passwdroot /bin/bashking /bin/bashguest-b0SIey /bin/bash看到上⾯的那个-l的参数没?它的最主要的作⽤就是chomp字段和在每个输出的后⾯加上“\n”,让输出换⾏;是不是挺有⽤的呢?有没有其它和awk有类似的地⽅呢?答案是肯定的,BEGIN{},END{} 是不是也很熟悉呢?以下是⼀些常⽤的简单实例#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,其实⼀样,这个例⼦中,是给当前⽂件中的内容都加⼀个⾏号打印出来.注:$.表⽰当前⾏号#perl -pe ‘$_ = “$. $_”‘ filename 这个其实和上⾯⼀样,分别只是使⽤了-p替换了-n,这个有个什么好处啦,别的地⽅都⼀样,但-p按⾏来遍历完⽂件后,会给$_打印出来.⼤家还记得awk分割域(awk ‘{i = NF – 1; print $1 + $i}')啊,是不是很⽅便,下⾯我们来看看perl复制代码代码如下:#perl -lane ‘print $F[0] + $F[-2]‘ 这个神奇的地⽅在于-a,使⽤-a后.因为-n分⾏读进来,然后-a给数据分割成@F的数组.#perl -ne ‘print if /^START$/ .. /^END$/' 打印正则中从$start到$end的地⽅#perl -ne ‘print if $. >= 15; exit if $. >= 17;' 有效地打印数字范围中的⾏#perl -p -i.bak -e ‘s/\bfoo\b/bar/g' *.c 原地修改 -i 开关的神奇之处在于它对 @ARGV 中的每个⽂件都⽤该脚本对该⽂件输出所产⽣的⽂件版本进⾏替代#perl -ne ‘print scalar reverse $_' test 给⽂件中的内容反向排序,⽐如⽂件中有abc,就会变成cba。
Perl语法中Perl运算符用法指南
Perl语法中Perl运算符⽤法指南1.Perl运算符1.1 算数运算符 Perl固然在变量与数据范例都和C⼤不不异,然⽽它的运算符和C险些不异,除了C的范例转换运算符type,指针引⽤运算符*ptr和布局成员选择符,其他C的运算符险些完全呈现在Perl⾥,Perl新增了⼏个新运算符,好⽐在字符处置⽅⾯.◆Perl到今朝撑持的算数运算符有⼀些⼏种:+加法运算符-减法运算符*乘运算符/除运算符(只对浮点数运算)%取模运算符(只对整数运算)下⾯给出Perl算数运算的⼀些实例:$x=2.5;$y=3;print($x+2*$y);print(7/$y);printint(7/$y);print(7%$y);print(7.5%$y);Perl还撑持递增和递减运算符:++递加--递减◆Perl新增了乘⽅运算符:**,请看下⾯的例⼦:$x=2**3;#2的3次⽅$y=2**0.5;#2的平⽅根$z=-2**-3;#成果是:-0.1251.2 Perl语法之位运算符位运算符对⼆进制表达式的整数情势举⾏处置,运算成果为整数.若是位运算符的操纵数是字符串或分数,Perl起⾸把它们转换成整数,并⽤32位长整数情势暗⽰它们.Perl撑持全部的C说话运算符:&位与运算符.位⾮运算符<<位左移运算符>>位右移运算符有关位运算符的具体内容,请参看C说话有关的内容,这⾥我们就未⼏讲了,只举⼏个例⼦:$x=5;$y=3;print$x|$y;#成果是7(⼆进制暗⽰:111)print$x&$y;#成果是1(⼆进制暗⽰:001)print$x<<2;#成果是20(⼆进制暗⽰:10100)print$x>>1;#成果是2(⼆进制暗⽰:10)1.3Perl语法之⽐⼒运算符 ⽐⼒运算符的功效是⽐⼒两个操纵数的值.Perl在举⾏⽐⼒运算前,会先将字符操纵数转换为数字.Perl⽤专门的字符串⽐⼒运算符对纯字符举⾏表运算.1.4Perl语法之逻辑运算符逻辑运算符测试布尔表达式的值,其成果为真或假.Perl以为逻辑运算符的每个操纵数都为布尔值(即真或假).Perl的逻辑运算符包罗:||逻辑或运算符;&&逻辑与运算符.Perl按从左到右的挨次计较逻辑表达式.当逻辑或运算符的⼀个操纵数为真,⼤概当逻辑与运算符的⼀个操纵数为假时,Perl 将停⽌逻辑表达式的计较.Perl操纵这种短回路计值快速计较表达式的值.是以,这两个运算符也叫短回路AND和短回路OR.!负运算符:前提运算符,挨次计值符运算符!否认操纵数的布尔值,相称于逻辑⾮.?:前提运算符,有3个操纵数,表达情势为:condition?true-result:false-result$access=($usereq'流云'?'root':'guest');挨次运算符(,)从严酷意义上讲并不是逻辑运算符,由于它并不查抄操纵数的真假.Perl从左到右的计较逗号运算符,并返回最右边的操纵数,都好运算符是从C连续出来的,详细利⽤可以参考C⾥的⽤法,这⾥我就不累述了.1.5Perl语法之字符运算符因为Perl⾃⼰是为⽂本处置开辟的.是以,它增添很多新的字符串运算符.Perl的字符串运算符包罗:.字符毗连运算符x字符串复制运算符=~将⼀个变量绑定到模式⽴室!~将⼀个变量绑定到模式⽴室,取⾮前两个运算符⽐⼒简略.此刻看看例⼦:print'C'.'a'.'l'x2;#输出成果将是:Call;后两个运算符⾸要⽤于模式⽴室,今后将会有关于模式⽴室的详细解说,这⾥就未⼏说了,我们来看看它们的例⼦,以领会它们的感化:$text='本⽇下⾬了';print($text=~/下⾬/)?'本⽇下⾬了':'本⽇没下⾬';我们看到的例⼦可以发明是否变量中是否包罗我们所必要的字符串.1.6Perl语法之赋值运算符赋值运算符和C说话的赋值运算符差未⼏,以下是各类赋值运算符:=+=-=*=/=%=|=&=^=~=<<=>>=**==.=x=1.7Perl语法之Lvalue 在Perl和C说话中,lvalue暗⽰赋值运算符左边的实体.也便是说,lvalue与变量⼀样,可以给它分派值.⽐⽅在Perl号令⽂件中不克不及向字符串赋值,如"Bob"=32这个语句便是错误的!由于"Bob"不是⼀个lvalue,可是若是对$Bob赋值,如$Bob=32,这个语句便是准确的!由于变量$Bob是⼀个lvalue.在Perl中,任何故意义的lvalue只能暗⽰⼀个实体.⽐⽅下⾯的第⼀个语句列出了表的值(便是数组的值,只不外说法纷歧样⽽已),@color便是⼀个lvalue,第⼆个语句中,将表的值赋值给3个标量变量,3个变量便是lvalue:@color=($r,$g,$b);($r,$g,$b)=@color;Perl的赋值运算符对表举⾏处置时,可以不合错误整个表举⾏处置,⽽只针对表的某⼀个⼤概⼏个元素举⾏赋值:@times[2,5,9]=(20,40,10);($arg1,$arg2,@reset)=@ARGV;1.8Perl语法之表运算符 Perl包罗以下⼀些表运算符,⽽c没有:,表机关符..规模运算符x表复制运算符前⾯我们在先容"标量与数组变量"时,已经计划到了机关符(我以为叫分开符,更轻易明⽩些)规模运算符我们在⽤来建⽴数组下标规模时,也⽤到过!不外,请注重它的功效还远不⽌这个,它还可以⽤来作为返回从左边操纵数到右边操纵数之间挨次整数的规模(包罗摆布双⽅的操纵数).号令⽂件凡是同时操纵规模运算符缔造⼀个持续整数表:@digits=0..9;如许我们就缔造了⼀个表,其值为(0,1,2,3,4,5,6,7,8,9)表复制运算符是⼀个很是风趣的东东,我们来看⼀个例⼦:@copy_3=(1,2,3)x3;这个表有9元素,其值为(1,2,3,1,2,3,1,2,3)怎么样?很便利吧!1.9Perl语法之⽂件运算符Perl⼤⼤扩展了⽂件处置运算符.Perl⾄少有27个运算符在不打开⽂件的环境下,可以或许测试⽂件的信息,可是很不幸,因为Perl在最初是UNIX的东西,以是绝⼤⼤都的运算符在我们风⾏的平台上:WIN9X/NT体系⽆法利⽤.但万幸的是不是全数另有4个运算符绝对可⽤,并且功效不错哦!⼀下便是那4个运算符:-d测试⽂件是不是⼀个⽬次;-e测试⽂件是否存在;-s测试⽂件的巨细;-w测试⽂件是否是可写的;前两个运算符返回的是布尔值(即真或假),第3个运算符返回⽂件的巨细(以字节作为返回体例).下⾯是利⽤⽅式:复制代码代码如下:if(-e'Perl.exe'){print'Filesizeis:'-s'Perl.exe';}else{print'Can\'tfindPerl.exe\n';}(-w'SomeFile')||die"CannotwritetoSomeFile\n";。
perl中的引用详解
perl中的引⽤详解⼀、引⽤简介引⽤就是指针,可以指向变量、数组、哈希表(也叫关联数组)甚⾄⼦程序。
Pascal或C程序员应该对引⽤(即指针)的概念很熟悉,引⽤就是某值的地址,对其的使⽤则取决于程序员和语⾔的规定。
在Perl中,可以把引⽤称为指针,⼆者是通⽤ Perl5中的两种引⽤类型为硬引⽤和符号引⽤。
符号引⽤含有变量的名字,它对运⾏时创建变量名并定位很有⽤,基本上,符号引⽤就象⽂件名或UNIX系统中的软链接。
⽽硬引⽤则象⽂件系统中的硬链接。
Perl4只允许符号引⽤,给使⽤造成⼀些困难。
例如,只允许通过名字对包的符号名哈希表(名为_main{})建⽴索引。
Perl5则允许数据的硬引⽤,⽅便多了。
硬引⽤跟踪引⽤的计数,当其数为零时,Perl⾃动将被引⽤的项⽬释放,如果该项⽬是对象,则析构释放到内存池中。
Perl本⾝就是个⾯向对象的语⾔,因为Perl中的任何东西都是对象,包和模块使得对象更易于使⽤。
简单变量的硬引⽤很简单,对于⾮简单变量的引⽤,你必须显式地解除引⽤并告诉其应如何做,详见《第章Perl中的⾯向对象编程》。
⼆、使⽤引⽤本章中,简单变量指像$pointer这样的变量,$pointer仅含⼀个数据项,其可以为数字、字符串或地址。
任何简单变量均可保存硬引⽤。
因为数组和哈希表含有多个简单变量,所以可以建⽴多种组合⽽成的复杂的数据结构,如数组的数组、哈希表的数组、⼦程序的哈希表等等。
只要你理解其实只是在⽤简单变量在⼯作,就应该可以正确的在最复杂的⾸先来看⼀些基本要点。
如果$pointer的值为⼀个数组的指针,则通过形式@$pointer来访问数组中的元素。
形式@$pointer的意义为“取出$pointer中的地址值当作数组使⽤”。
类似的,%$pointer为指向哈希表中第⼀个元素的引⽤。
有多种构建引⽤的⽅法,⼏乎可以对任何数据建⽴引⽤,如数组、简单变量、⼦程序、⽂件句柄,以及--C程序员会感兴趣的--引⽤。
$argv 参数数组
$argv 参数数组$argv 参数数组是一种在编程中经常使用的变量,它可以存储脚本运行时传入的命令行参数。
通过使用$argv 参数数组,我们可以根据不同的需求来执行不同的操作。
让我们来看看$argv 参数数组的基本用法。
当我们在命令行中执行一个脚本时,可以通过在命令后面添加参数来向脚本传递信息。
这些参数将被存储在$argv 数组中,其中$argv[0] 存储的是脚本的名称,$argv[1] 存储的是第一个参数,以此类推。
通过使用这些参数,我们可以在脚本中进行相应的操作。
接下来,让我们来看一个实际的例子。
假设我们有一个名为"hello.php" 的脚本,我们可以通过在命令行中执行以下命令来运行它:php hello.php John在这个例子中,我们将"John" 作为参数传递给了脚本。
那么在脚本中,我们可以通过使用$argv[1] 来获取这个参数,并进行相应的处理。
比如,我们可以输出一条欢迎信息,如下所示:echo "Hello, " . $argv[1] . "!";通过执行以上代码,我们将会在命令行中看到输出结果为"Hello, John!"。
除了单个参数外,我们还可以传递多个参数给脚本。
例如,我们可以执行以下命令:php hello.php John Doe在脚本中,我们可以通过使用$argv[2] 来获取第二个参数,并进行相应的处理。
比如,我们可以输出一条个人信息,如下所示:echo "Hello, " . $argv[1] . " " . $argv[2] . "!";通过执行以上代码,我们将会在命令行中看到输出结果为"Hello, John Doe!"。
总结一下,$argv 参数数组是一种非常有用的工具,它可以帮助我们在命令行中传递参数给脚本,并根据这些参数执行相应的操作。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
perl命令行参数内建数组@ARGV浅析
当perl脚本运行时,从命令行上传递给它的参数存储在内建数组@ARGV中,@ARGV是PERL默认用来接收参数的数组,可以有多个参数,$ARGV[0]是表示接收到的个参数,$ARGV[1]表示第二个。
使用方法为:
复制代码代码如下:perl my.pl $ARGV[0] $ARGV[1]
看一个具体例子:
比如文件1的内容:
复制代码代码如下:1320238
1320239
1320239
1320238
1320238
1320238
1320235
1320237
文件2的内容:
复制代码代码如下:102 5709072117805887 4001 1301854
102 5709072117807510 4001 1320292
102 5709072117838653 4001 1301857
102 5709072117814280 4001 1305832
102 5709072117839397 4001 1310673
102 5709072117839335 4001 1311270
我想先把文件1的内容读取出来,然后读取文件二的内容,在读取文件2的内容的时候,文件2的最后一列需要包含在上文件1内。
复制代码代码如下:[root@localhost ~]$ perl ex.pl 1.txt 2.txt
[root@localhost ~]$ cat ex.pl
#!/usr/bin/perl
use strict;
open(ONE,"$ARGV[0]") or die $!;
open(TWO,"$ARGV[1]") or die $!;
my %hash;
while () {
chomp;
my @line=split;
my $column4=$line[3];
$hash{$column4}=$_;
}
while () {
chomp;
print $hash{$_} if defined $hash{$_};
}
print"\n";。