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
命令行参数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的更多相关文章
- Perl中命令行参数以及打开管道文件
打开管道文件 Linux提供了管道机制,可以方便应用程序之间的数据传递.在Perl中,扣开和使用管道可采用如下形式的open函数: open(Filehandle,”丨 CMD”); 其中 ...
- Python命令行参数sys.argv[]
学习C语言的时候就没弄明白命令行参数的用法,在学习Pyton 的时候又遇到了命令行参数,在这里稍微学习了一下,稍微明白了一些在这里做个记录方便后面回顾复习. Sys.argv[]是用来获取命令行参数的 ...
- c语言中命令行参数argc,argv[]详解
main(int argc,char *argv[ ]) 1.argc为整数 2.argv为指针的指针(可理解为:char **argv or: char *argv[] or: char argv[ ...
- awk,perl,python的命令行参数处理
Python,Perl,Bash命令行参数 Part I 日常经常性的和Perl,Python,Bash打交道,但是又经常性的搞混他们之间,在命令行上的特殊性和index的区别,Python真的是人性 ...
- 命令行参数(argc, argv)
每个C语言程序都必须有一个称为main()的函数,作为程序启动的起点.当执行程序时,命令行参数(command-line argument)(由shell逐一解析)通过两个入参提供给main()函数. ...
- c语言命令行参数
int main(int argc, char * argv[]) { ..... } argc: 代表启动程序时,命令行参数的个数.C和C++语言规定,可执行程序程序本身的文件名,也算是一个命令行参 ...
- 关于C语言命令行参数问题
1 int main(int argc,char** argv) 参数: argc:命令行参数的个数 argv:保存命令行参数:argv[0]保存本程序自己的名称 现在自己只知道这些以后再有学习继续补 ...
- C++main函数与命令行参数,退出程序
本文翻译自:https://docs.microsoft.com/en-us/cpp/cpp/main-function-command-line-args?view=vs-2019 (除动态链接库d ...
- Python命令行参数及文件读出写入
看完了柯老板的个人编程作业,虽然是评测组不用做此次作业,但还是想对本次作业涉及到利用Python命令行参数以及进行文件读出写入操作做一个简单的总结.(个人编程作业还是想自己能敲一敲,毕竟我的码力还是小 ...
随机推荐
- appium + java + WebDriverAgent实现IOS app启动
Appium v1.8.1 <dependency> <groupId>io.appium</groupId> <artifactId>ja ...
- Spring aop框架使用的jar包
除了前两个jar包,后面的jar包spring框架包中都有,前两个jar包的下载地址:https://pan.baidu.com/s/1L-GLGT1c8vnwFwqLxzzZuw
- mac os 下 vs code 开发 .net core
1.软件下载 .net core 2.0 sdk: vs code 最新版: 2.用 dotnet 命令行 dotnet cli 创建项目 打开终端,创建这次项目的文件夹,mkdir Demo1: c ...
- Kali 2017 使用SSH进行远程登录 设置 ssh 开机自启动
一.配置SSH参数 修改sshd_config文件,命令为: vi /etc/ssh/sshd_config 输入“ /Pass ”回车搜索 找到#PasswordAuthentication no的 ...
- [转载]你所不了解的DevOps
DevOps开发运维训练营 一旦建立了创新的文化,即使那些并非科学家或者工程师的人——诗人.演员.记者——也能以团体的形式,接受科学文化的意义.他们信奉创新文化的概念.他们以促进这种文化的方式投票.他 ...
- 从 Spring Cloud 看一个微服务框架的「五脏六腑」
原文:https://webfe.kujiale.com/spring-could-heart/ Spring Cloud 是一个基于 Spring Boot 实现的微服务框架,它包含了实现微服务架构 ...
- 解析Java分布式系统中的缓存架构(上)
作者 陈彩华 文章转载交流请联系 caison@aliyun.com 本文主要介绍大型分布式系统中缓存的相关理论,常见的缓存组件以及应用场景. 1 缓存概述 2 缓存的分类 缓存主要分为以下四类 2. ...
- Docker系列教程26-Docker Compose控制服务启动顺序
作者:周立 在生产中,往往有严格控制服务启动顺序的需求.然而Docker Compose自身并不具备该能力.要想实现启动顺序的控制,Docker Compose建议我们使用: wait-for-it ...
- 5.AutoCompleteTextView、自定义广播
新建信息 布局:自动出来的是系统的组件,里面是listview,写ontextchanglis也行 <LinearLayout xmlns:android="http://schema ...
- 7.首页、bitmaputils
HomeProtocol public class HomeProtocol extends BaseProtocol<List<AppInfo>>{ // 1 把整个json ...