程序名:$0

$0表示当前正在运行的Perl脚本名。有3种情况:

  1. 如果执行方式为perl x.pl,则$0的值为x.pl而非perl命令本身
  2. 如果执行方式为./x.pl,则$0的值为./x.pl
  3. 如果执行的是perl -eperl -E一行式perl程序,则$0的值为-e-E

命令行参数ARGV

  • perl将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/perl

print '$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/perl

while(<>){
print $_;
}
shell> ./test.plx a.log b.log

如果想读取标准输入,只需使用"-"作为文件参数即可。

$ echo -e "abcd\nefg" | ./test.plx a.log - b.log

上面将按先后顺序读取a.log,标准输入(管道左边命令的输出内容),b.log。

Perl的命令行参数和ARGV的更多相关文章

  1. Perl中命令行参数以及打开管道文件

    打开管道文件   Linux提供了管道机制,可以方便应用程序之间的数据传递.在Perl中,扣开和使用管道可采用如下形式的open函数:   open(Filehandle,”丨 CMD”);   其中 ...

  2. Python命令行参数sys.argv[]

    学习C语言的时候就没弄明白命令行参数的用法,在学习Pyton 的时候又遇到了命令行参数,在这里稍微学习了一下,稍微明白了一些在这里做个记录方便后面回顾复习. Sys.argv[]是用来获取命令行参数的 ...

  3. c语言中命令行参数argc,argv[]详解

    main(int argc,char *argv[ ]) 1.argc为整数 2.argv为指针的指针(可理解为:char **argv or: char *argv[] or: char argv[ ...

  4. awk,perl,python的命令行参数处理

    Python,Perl,Bash命令行参数 Part I 日常经常性的和Perl,Python,Bash打交道,但是又经常性的搞混他们之间,在命令行上的特殊性和index的区别,Python真的是人性 ...

  5. 命令行参数(argc, argv)

    每个C语言程序都必须有一个称为main()的函数,作为程序启动的起点.当执行程序时,命令行参数(command-line argument)(由shell逐一解析)通过两个入参提供给main()函数. ...

  6. c语言命令行参数

    int main(int argc, char * argv[]) { ..... } argc: 代表启动程序时,命令行参数的个数.C和C++语言规定,可执行程序程序本身的文件名,也算是一个命令行参 ...

  7. 关于C语言命令行参数问题

    1 int main(int argc,char** argv) 参数: argc:命令行参数的个数 argv:保存命令行参数:argv[0]保存本程序自己的名称 现在自己只知道这些以后再有学习继续补 ...

  8. C++main函数与命令行参数,退出程序

    本文翻译自:https://docs.microsoft.com/en-us/cpp/cpp/main-function-command-line-args?view=vs-2019 (除动态链接库d ...

  9. Python命令行参数及文件读出写入

    看完了柯老板的个人编程作业,虽然是评测组不用做此次作业,但还是想对本次作业涉及到利用Python命令行参数以及进行文件读出写入操作做一个简单的总结.(个人编程作业还是想自己能敲一敲,毕竟我的码力还是小 ...

随机推荐

  1. Day09 (黑客成长日记) 爬虫入门

    爬虫的基本流程: 发起请求通过HTTP库向目标站点发起请求,也就是发送一个Request,请求可以包含额外的header等信息,等待服务器响应 获取响应内容如果服务器能正常响应,会得到一个Respon ...

  2. post文件下载

    this.$http({ method: 'post', url: '/file/download', responseType: 'blob', data: JSON.stringify(this. ...

  3. CCNA学前基础一

    网络设备: 集线器:集线器就是一种采用共享式工作状态的设备.Hub将信号放大后传输给其他端口,即传输线路是共享的. 交换机:用于连接终端设备,和基本的安全功能还有广播域的隔离.优点实现多用户同时访问, ...

  4. 把纯C的动态库代码改造成C++版的

    近期想把一份纯C的跨Win/Linux的动态库工程代码改成支持C++编译器,这样用C++写起代码来比较顺手.要点是保证动态库的ABI一致性,既导出接口不能改变. 主要的改动有: 1.把.c后缀名换成. ...

  5. 英语演讲稿——Get Along with Fear

    Hi. My name is Zhang Meng. I’m an engineer at Keysight. Today I’m not going to introduce my birthpla ...

  6. [转] External(and Live) snapshots with libvirt

    http://kashyapc.com/ Raw image is a blob of data exposed directly in VM as block device, it can't sn ...

  7. Converting Recursive Traversal to Iterator

    In this article, I'm going to introduce a general pattern named Lazy Iterator for converting recursi ...

  8. 从 Spring Cloud 看一个微服务框架的「五脏六腑」

    原文:https://webfe.kujiale.com/spring-could-heart/ Spring Cloud 是一个基于 Spring Boot 实现的微服务框架,它包含了实现微服务架构 ...

  9. Javascript高级编程学习笔记(40)—— DOM(6)CDATASection、DocumentType

    CDATASection类型 CDATASection类型是只针对XML文档的类型 因为浏览器无法解析 在浏览器中创建CDATASection的函数也无法正常使用 该类型有以下属性 nodeType: ...

  10. 吴恩达机器学习笔记45-使用支持向量机(Using A SVM)

    本篇我们讨论如何运行或者运用SVM. 在高斯核函数之外我们还有其他一些选择,如:多项式核函数(Polynomial Kernel)字符串核函数(String kernel)卡方核函数( chi-squ ...